mirror of
https://github.com/TheBinaryNinja/tvapp2.git
synced 2026-06-04 06:45:41 -04:00
build: stop tracking tvapp2/node_modules
This commit is contained in:
16
tvapp2/node_modules/.bin/playwright
generated
vendored
16
tvapp2/node_modules/.bin/playwright
generated
vendored
@@ -1,16 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
|
||||||
|
|
||||||
case `uname` in
|
|
||||||
*CYGWIN*|*MINGW*|*MSYS*)
|
|
||||||
if command -v cygpath > /dev/null 2>&1; then
|
|
||||||
basedir=`cygpath -w "$basedir"`
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
if [ -x "$basedir/node" ]; then
|
|
||||||
exec "$basedir/node" "$basedir/../playwright/cli.js" "$@"
|
|
||||||
else
|
|
||||||
exec node "$basedir/../playwright/cli.js" "$@"
|
|
||||||
fi
|
|
||||||
16
tvapp2/node_modules/.bin/playwright-core
generated
vendored
16
tvapp2/node_modules/.bin/playwright-core
generated
vendored
@@ -1,16 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
|
||||||
|
|
||||||
case `uname` in
|
|
||||||
*CYGWIN*|*MINGW*|*MSYS*)
|
|
||||||
if command -v cygpath > /dev/null 2>&1; then
|
|
||||||
basedir=`cygpath -w "$basedir"`
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
if [ -x "$basedir/node" ]; then
|
|
||||||
exec "$basedir/node" "$basedir/../playwright-core/cli.js" "$@"
|
|
||||||
else
|
|
||||||
exec node "$basedir/../playwright-core/cli.js" "$@"
|
|
||||||
fi
|
|
||||||
17
tvapp2/node_modules/.bin/playwright-core.cmd
generated
vendored
17
tvapp2/node_modules/.bin/playwright-core.cmd
generated
vendored
@@ -1,17 +0,0 @@
|
|||||||
@ECHO off
|
|
||||||
GOTO start
|
|
||||||
:find_dp0
|
|
||||||
SET dp0=%~dp0
|
|
||||||
EXIT /b
|
|
||||||
:start
|
|
||||||
SETLOCAL
|
|
||||||
CALL :find_dp0
|
|
||||||
|
|
||||||
IF EXIST "%dp0%\node.exe" (
|
|
||||||
SET "_prog=%dp0%\node.exe"
|
|
||||||
) ELSE (
|
|
||||||
SET "_prog=node"
|
|
||||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
|
||||||
)
|
|
||||||
|
|
||||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\playwright-core\cli.js" %*
|
|
||||||
28
tvapp2/node_modules/.bin/playwright-core.ps1
generated
vendored
28
tvapp2/node_modules/.bin/playwright-core.ps1
generated
vendored
@@ -1,28 +0,0 @@
|
|||||||
#!/usr/bin/env pwsh
|
|
||||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
|
||||||
|
|
||||||
$exe=""
|
|
||||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
|
||||||
# Fix case when both the Windows and Linux builds of Node
|
|
||||||
# are installed in the same directory
|
|
||||||
$exe=".exe"
|
|
||||||
}
|
|
||||||
$ret=0
|
|
||||||
if (Test-Path "$basedir/node$exe") {
|
|
||||||
# Support pipeline input
|
|
||||||
if ($MyInvocation.ExpectingInput) {
|
|
||||||
$input | & "$basedir/node$exe" "$basedir/../playwright-core/cli.js" $args
|
|
||||||
} else {
|
|
||||||
& "$basedir/node$exe" "$basedir/../playwright-core/cli.js" $args
|
|
||||||
}
|
|
||||||
$ret=$LASTEXITCODE
|
|
||||||
} else {
|
|
||||||
# Support pipeline input
|
|
||||||
if ($MyInvocation.ExpectingInput) {
|
|
||||||
$input | & "node$exe" "$basedir/../playwright-core/cli.js" $args
|
|
||||||
} else {
|
|
||||||
& "node$exe" "$basedir/../playwright-core/cli.js" $args
|
|
||||||
}
|
|
||||||
$ret=$LASTEXITCODE
|
|
||||||
}
|
|
||||||
exit $ret
|
|
||||||
17
tvapp2/node_modules/.bin/playwright.cmd
generated
vendored
17
tvapp2/node_modules/.bin/playwright.cmd
generated
vendored
@@ -1,17 +0,0 @@
|
|||||||
@ECHO off
|
|
||||||
GOTO start
|
|
||||||
:find_dp0
|
|
||||||
SET dp0=%~dp0
|
|
||||||
EXIT /b
|
|
||||||
:start
|
|
||||||
SETLOCAL
|
|
||||||
CALL :find_dp0
|
|
||||||
|
|
||||||
IF EXIST "%dp0%\node.exe" (
|
|
||||||
SET "_prog=%dp0%\node.exe"
|
|
||||||
) ELSE (
|
|
||||||
SET "_prog=node"
|
|
||||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
|
||||||
)
|
|
||||||
|
|
||||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\playwright\cli.js" %*
|
|
||||||
28
tvapp2/node_modules/.bin/playwright.ps1
generated
vendored
28
tvapp2/node_modules/.bin/playwright.ps1
generated
vendored
@@ -1,28 +0,0 @@
|
|||||||
#!/usr/bin/env pwsh
|
|
||||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
|
||||||
|
|
||||||
$exe=""
|
|
||||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
|
||||||
# Fix case when both the Windows and Linux builds of Node
|
|
||||||
# are installed in the same directory
|
|
||||||
$exe=".exe"
|
|
||||||
}
|
|
||||||
$ret=0
|
|
||||||
if (Test-Path "$basedir/node$exe") {
|
|
||||||
# Support pipeline input
|
|
||||||
if ($MyInvocation.ExpectingInput) {
|
|
||||||
$input | & "$basedir/node$exe" "$basedir/../playwright/cli.js" $args
|
|
||||||
} else {
|
|
||||||
& "$basedir/node$exe" "$basedir/../playwright/cli.js" $args
|
|
||||||
}
|
|
||||||
$ret=$LASTEXITCODE
|
|
||||||
} else {
|
|
||||||
# Support pipeline input
|
|
||||||
if ($MyInvocation.ExpectingInput) {
|
|
||||||
$input | & "node$exe" "$basedir/../playwright/cli.js" $args
|
|
||||||
} else {
|
|
||||||
& "node$exe" "$basedir/../playwright/cli.js" $args
|
|
||||||
}
|
|
||||||
$ret=$LASTEXITCODE
|
|
||||||
}
|
|
||||||
exit $ret
|
|
||||||
4637
tvapp2/node_modules/.package-lock.json
generated
vendored
4637
tvapp2/node_modules/.package-lock.json
generated
vendored
File diff suppressed because it is too large
Load Diff
47
tvapp2/node_modules/lodash.clonedeep/LICENSE
generated
vendored
47
tvapp2/node_modules/lodash.clonedeep/LICENSE
generated
vendored
@@ -1,47 +0,0 @@
|
|||||||
Copyright jQuery Foundation and other contributors <https://jquery.org/>
|
|
||||||
|
|
||||||
Based on Underscore.js, copyright Jeremy Ashkenas,
|
|
||||||
DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
|
|
||||||
|
|
||||||
This software consists of voluntary contributions made by many
|
|
||||||
individuals. For exact contribution history, see the revision history
|
|
||||||
available at https://github.com/lodash/lodash
|
|
||||||
|
|
||||||
The following license applies to all parts of this software except as
|
|
||||||
documented below:
|
|
||||||
|
|
||||||
====
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of this software and associated documentation files (the
|
|
||||||
"Software"), to deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
====
|
|
||||||
|
|
||||||
Copyright and related rights for sample code are waived via CC0. Sample
|
|
||||||
code is defined as all source code displayed within the prose of the
|
|
||||||
documentation.
|
|
||||||
|
|
||||||
CC0: http://creativecommons.org/publicdomain/zero/1.0/
|
|
||||||
|
|
||||||
====
|
|
||||||
|
|
||||||
Files located in the node_modules and vendor directories are externally
|
|
||||||
maintained libraries used by this software which have their own
|
|
||||||
licenses; we recommend you read them, as their terms may differ from the
|
|
||||||
terms above.
|
|
||||||
18
tvapp2/node_modules/lodash.clonedeep/README.md
generated
vendored
18
tvapp2/node_modules/lodash.clonedeep/README.md
generated
vendored
@@ -1,18 +0,0 @@
|
|||||||
# lodash.clonedeep v4.5.0
|
|
||||||
|
|
||||||
The [lodash](https://lodash.com/) method `_.cloneDeep` exported as a [Node.js](https://nodejs.org/) module.
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
Using npm:
|
|
||||||
```bash
|
|
||||||
$ {sudo -H} npm i -g npm
|
|
||||||
$ npm i --save lodash.clonedeep
|
|
||||||
```
|
|
||||||
|
|
||||||
In Node.js:
|
|
||||||
```js
|
|
||||||
var cloneDeep = require('lodash.clonedeep');
|
|
||||||
```
|
|
||||||
|
|
||||||
See the [documentation](https://lodash.com/docs#cloneDeep) or [package source](https://github.com/lodash/lodash/blob/4.5.0-npm-packages/lodash.clonedeep) for more details.
|
|
||||||
1748
tvapp2/node_modules/lodash.clonedeep/index.js
generated
vendored
1748
tvapp2/node_modules/lodash.clonedeep/index.js
generated
vendored
File diff suppressed because it is too large
Load Diff
17
tvapp2/node_modules/lodash.clonedeep/package.json
generated
vendored
17
tvapp2/node_modules/lodash.clonedeep/package.json
generated
vendored
@@ -1,17 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "lodash.clonedeep",
|
|
||||||
"version": "4.5.0",
|
|
||||||
"description": "The lodash method `_.cloneDeep` exported as a module.",
|
|
||||||
"homepage": "https://lodash.com/",
|
|
||||||
"icon": "https://lodash.com/icon.svg",
|
|
||||||
"license": "MIT",
|
|
||||||
"keywords": "lodash-modularized, clonedeep",
|
|
||||||
"author": "John-David Dalton <john.david.dalton@gmail.com> (http://allyoucanleet.com/)",
|
|
||||||
"contributors": [
|
|
||||||
"John-David Dalton <john.david.dalton@gmail.com> (http://allyoucanleet.com/)",
|
|
||||||
"Blaine Bublitz <blaine.bublitz@gmail.com> (https://github.com/phated)",
|
|
||||||
"Mathias Bynens <mathias@qiwi.be> (https://mathiasbynens.be/)"
|
|
||||||
],
|
|
||||||
"repository": "lodash/lodash",
|
|
||||||
"scripts": { "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\"" }
|
|
||||||
}
|
|
||||||
202
tvapp2/node_modules/playwright-core/LICENSE
generated
vendored
202
tvapp2/node_modules/playwright-core/LICENSE
generated
vendored
@@ -1,202 +0,0 @@
|
|||||||
Apache License
|
|
||||||
Version 2.0, January 2004
|
|
||||||
http://www.apache.org/licenses/
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
||||||
|
|
||||||
1. Definitions.
|
|
||||||
|
|
||||||
"License" shall mean the terms and conditions for use, reproduction,
|
|
||||||
and distribution as defined by Sections 1 through 9 of this document.
|
|
||||||
|
|
||||||
"Licensor" shall mean the copyright owner or entity authorized by
|
|
||||||
the copyright owner that is granting the License.
|
|
||||||
|
|
||||||
"Legal Entity" shall mean the union of the acting entity and all
|
|
||||||
other entities that control, are controlled by, or are under common
|
|
||||||
control with that entity. For the purposes of this definition,
|
|
||||||
"control" means (i) the power, direct or indirect, to cause the
|
|
||||||
direction or management of such entity, whether by contract or
|
|
||||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
||||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
||||||
|
|
||||||
"You" (or "Your") shall mean an individual or Legal Entity
|
|
||||||
exercising permissions granted by this License.
|
|
||||||
|
|
||||||
"Source" form shall mean the preferred form for making modifications,
|
|
||||||
including but not limited to software source code, documentation
|
|
||||||
source, and configuration files.
|
|
||||||
|
|
||||||
"Object" form shall mean any form resulting from mechanical
|
|
||||||
transformation or translation of a Source form, including but
|
|
||||||
not limited to compiled object code, generated documentation,
|
|
||||||
and conversions to other media types.
|
|
||||||
|
|
||||||
"Work" shall mean the work of authorship, whether in Source or
|
|
||||||
Object form, made available under the License, as indicated by a
|
|
||||||
copyright notice that is included in or attached to the work
|
|
||||||
(an example is provided in the Appendix below).
|
|
||||||
|
|
||||||
"Derivative Works" shall mean any work, whether in Source or Object
|
|
||||||
form, that is based on (or derived from) the Work and for which the
|
|
||||||
editorial revisions, annotations, elaborations, or other modifications
|
|
||||||
represent, as a whole, an original work of authorship. For the purposes
|
|
||||||
of this License, Derivative Works shall not include works that remain
|
|
||||||
separable from, or merely link (or bind by name) to the interfaces of,
|
|
||||||
the Work and Derivative Works thereof.
|
|
||||||
|
|
||||||
"Contribution" shall mean any work of authorship, including
|
|
||||||
the original version of the Work and any modifications or additions
|
|
||||||
to that Work or Derivative Works thereof, that is intentionally
|
|
||||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
||||||
or by an individual or Legal Entity authorized to submit on behalf of
|
|
||||||
the copyright owner. For the purposes of this definition, "submitted"
|
|
||||||
means any form of electronic, verbal, or written communication sent
|
|
||||||
to the Licensor or its representatives, including but not limited to
|
|
||||||
communication on electronic mailing lists, source code control systems,
|
|
||||||
and issue tracking systems that are managed by, or on behalf of, the
|
|
||||||
Licensor for the purpose of discussing and improving the Work, but
|
|
||||||
excluding communication that is conspicuously marked or otherwise
|
|
||||||
designated in writing by the copyright owner as "Not a Contribution."
|
|
||||||
|
|
||||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
||||||
on behalf of whom a Contribution has been received by Licensor and
|
|
||||||
subsequently incorporated within the Work.
|
|
||||||
|
|
||||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
||||||
copyright license to reproduce, prepare Derivative Works of,
|
|
||||||
publicly display, publicly perform, sublicense, and distribute the
|
|
||||||
Work and such Derivative Works in Source or Object form.
|
|
||||||
|
|
||||||
3. Grant of Patent License. Subject to the terms and conditions of
|
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
||||||
(except as stated in this section) patent license to make, have made,
|
|
||||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
||||||
where such license applies only to those patent claims licensable
|
|
||||||
by such Contributor that are necessarily infringed by their
|
|
||||||
Contribution(s) alone or by combination of their Contribution(s)
|
|
||||||
with the Work to which such Contribution(s) was submitted. If You
|
|
||||||
institute patent litigation against any entity (including a
|
|
||||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
||||||
or a Contribution incorporated within the Work constitutes direct
|
|
||||||
or contributory patent infringement, then any patent licenses
|
|
||||||
granted to You under this License for that Work shall terminate
|
|
||||||
as of the date such litigation is filed.
|
|
||||||
|
|
||||||
4. Redistribution. You may reproduce and distribute copies of the
|
|
||||||
Work or Derivative Works thereof in any medium, with or without
|
|
||||||
modifications, and in Source or Object form, provided that You
|
|
||||||
meet the following conditions:
|
|
||||||
|
|
||||||
(a) You must give any other recipients of the Work or
|
|
||||||
Derivative Works a copy of this License; and
|
|
||||||
|
|
||||||
(b) You must cause any modified files to carry prominent notices
|
|
||||||
stating that You changed the files; and
|
|
||||||
|
|
||||||
(c) You must retain, in the Source form of any Derivative Works
|
|
||||||
that You distribute, all copyright, patent, trademark, and
|
|
||||||
attribution notices from the Source form of the Work,
|
|
||||||
excluding those notices that do not pertain to any part of
|
|
||||||
the Derivative Works; and
|
|
||||||
|
|
||||||
(d) If the Work includes a "NOTICE" text file as part of its
|
|
||||||
distribution, then any Derivative Works that You distribute must
|
|
||||||
include a readable copy of the attribution notices contained
|
|
||||||
within such NOTICE file, excluding those notices that do not
|
|
||||||
pertain to any part of the Derivative Works, in at least one
|
|
||||||
of the following places: within a NOTICE text file distributed
|
|
||||||
as part of the Derivative Works; within the Source form or
|
|
||||||
documentation, if provided along with the Derivative Works; or,
|
|
||||||
within a display generated by the Derivative Works, if and
|
|
||||||
wherever such third-party notices normally appear. The contents
|
|
||||||
of the NOTICE file are for informational purposes only and
|
|
||||||
do not modify the License. You may add Your own attribution
|
|
||||||
notices within Derivative Works that You distribute, alongside
|
|
||||||
or as an addendum to the NOTICE text from the Work, provided
|
|
||||||
that such additional attribution notices cannot be construed
|
|
||||||
as modifying the License.
|
|
||||||
|
|
||||||
You may add Your own copyright statement to Your modifications and
|
|
||||||
may provide additional or different license terms and conditions
|
|
||||||
for use, reproduction, or distribution of Your modifications, or
|
|
||||||
for any such Derivative Works as a whole, provided Your use,
|
|
||||||
reproduction, and distribution of the Work otherwise complies with
|
|
||||||
the conditions stated in this License.
|
|
||||||
|
|
||||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
||||||
any Contribution intentionally submitted for inclusion in the Work
|
|
||||||
by You to the Licensor shall be under the terms and conditions of
|
|
||||||
this License, without any additional terms or conditions.
|
|
||||||
Notwithstanding the above, nothing herein shall supersede or modify
|
|
||||||
the terms of any separate license agreement you may have executed
|
|
||||||
with Licensor regarding such Contributions.
|
|
||||||
|
|
||||||
6. Trademarks. This License does not grant permission to use the trade
|
|
||||||
names, trademarks, service marks, or product names of the Licensor,
|
|
||||||
except as required for reasonable and customary use in describing the
|
|
||||||
origin of the Work and reproducing the content of the NOTICE file.
|
|
||||||
|
|
||||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
||||||
agreed to in writing, Licensor provides the Work (and each
|
|
||||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
||||||
implied, including, without limitation, any warranties or conditions
|
|
||||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
||||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
||||||
appropriateness of using or redistributing the Work and assume any
|
|
||||||
risks associated with Your exercise of permissions under this License.
|
|
||||||
|
|
||||||
8. Limitation of Liability. In no event and under no legal theory,
|
|
||||||
whether in tort (including negligence), contract, or otherwise,
|
|
||||||
unless required by applicable law (such as deliberate and grossly
|
|
||||||
negligent acts) or agreed to in writing, shall any Contributor be
|
|
||||||
liable to You for damages, including any direct, indirect, special,
|
|
||||||
incidental, or consequential damages of any character arising as a
|
|
||||||
result of this License or out of the use or inability to use the
|
|
||||||
Work (including but not limited to damages for loss of goodwill,
|
|
||||||
work stoppage, computer failure or malfunction, or any and all
|
|
||||||
other commercial damages or losses), even if such Contributor
|
|
||||||
has been advised of the possibility of such damages.
|
|
||||||
|
|
||||||
9. Accepting Warranty or Additional Liability. While redistributing
|
|
||||||
the Work or Derivative Works thereof, You may choose to offer,
|
|
||||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
||||||
or other liability obligations and/or rights consistent with this
|
|
||||||
License. However, in accepting such obligations, You may act only
|
|
||||||
on Your own behalf and on Your sole responsibility, not on behalf
|
|
||||||
of any other Contributor, and only if You agree to indemnify,
|
|
||||||
defend, and hold each Contributor harmless for any liability
|
|
||||||
incurred by, or claims asserted against, such Contributor by reason
|
|
||||||
of your accepting any such warranty or additional liability.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
APPENDIX: How to apply the Apache License to your work.
|
|
||||||
|
|
||||||
To apply the Apache License to your work, attach the following
|
|
||||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
||||||
replaced with your own identifying information. (Don't include
|
|
||||||
the brackets!) The text should be enclosed in the appropriate
|
|
||||||
comment syntax for the file format. We also recommend that a
|
|
||||||
file or class name and description of purpose be included on the
|
|
||||||
same "printed page" as the copyright notice for easier
|
|
||||||
identification within third-party archives.
|
|
||||||
|
|
||||||
Portions Copyright (c) Microsoft Corporation.
|
|
||||||
Portions Copyright 2017 Google Inc.
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
5
tvapp2/node_modules/playwright-core/NOTICE
generated
vendored
5
tvapp2/node_modules/playwright-core/NOTICE
generated
vendored
@@ -1,5 +0,0 @@
|
|||||||
Playwright
|
|
||||||
Copyright (c) Microsoft Corporation
|
|
||||||
|
|
||||||
This software contains code derived from the Puppeteer project (https://github.com/puppeteer/puppeteer),
|
|
||||||
available under the Apache 2.0 license (https://github.com/puppeteer/puppeteer/blob/master/LICENSE).
|
|
||||||
3
tvapp2/node_modules/playwright-core/README.md
generated
vendored
3
tvapp2/node_modules/playwright-core/README.md
generated
vendored
@@ -1,3 +0,0 @@
|
|||||||
# playwright-core
|
|
||||||
|
|
||||||
This package contains the no-browser flavor of [Playwright](http://github.com/microsoft/playwright).
|
|
||||||
5
tvapp2/node_modules/playwright-core/bin/install_media_pack.ps1
generated
vendored
5
tvapp2/node_modules/playwright-core/bin/install_media_pack.ps1
generated
vendored
@@ -1,5 +0,0 @@
|
|||||||
$osInfo = Get-WmiObject -Class Win32_OperatingSystem
|
|
||||||
# check if running on Windows Server
|
|
||||||
if ($osInfo.ProductType -eq 3) {
|
|
||||||
Install-WindowsFeature Server-Media-Foundation
|
|
||||||
}
|
|
||||||
42
tvapp2/node_modules/playwright-core/bin/reinstall_chrome_beta_linux.sh
generated
vendored
42
tvapp2/node_modules/playwright-core/bin/reinstall_chrome_beta_linux.sh
generated
vendored
@@ -1,42 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -e
|
|
||||||
set -x
|
|
||||||
|
|
||||||
if [[ $(arch) == "aarch64" ]]; then
|
|
||||||
echo "ERROR: not supported on Linux Arm64"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$PLAYWRIGHT_HOST_PLATFORM_OVERRIDE" ]; then
|
|
||||||
if [[ ! -f "/etc/os-release" ]]; then
|
|
||||||
echo "ERROR: cannot install on unknown linux distribution (/etc/os-release is missing)"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
ID=$(bash -c 'source /etc/os-release && echo $ID')
|
|
||||||
if [[ "${ID}" != "ubuntu" && "${ID}" != "debian" ]]; then
|
|
||||||
echo "ERROR: cannot install on $ID distribution - only Ubuntu and Debian are supported"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 1. make sure to remove old beta if any.
|
|
||||||
if dpkg --get-selections | grep -q "^google-chrome-beta[[:space:]]*install$" >/dev/null; then
|
|
||||||
apt-get remove -y google-chrome-beta
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 2. Update apt lists (needed to install curl and chrome dependencies)
|
|
||||||
apt-get update
|
|
||||||
|
|
||||||
# 3. Install curl to download chrome
|
|
||||||
if ! command -v curl >/dev/null; then
|
|
||||||
apt-get install -y curl
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 4. download chrome beta from dl.google.com and install it.
|
|
||||||
cd /tmp
|
|
||||||
curl -O https://dl.google.com/linux/direct/google-chrome-beta_current_amd64.deb
|
|
||||||
apt-get install -y ./google-chrome-beta_current_amd64.deb
|
|
||||||
rm -rf ./google-chrome-beta_current_amd64.deb
|
|
||||||
cd -
|
|
||||||
google-chrome-beta --version
|
|
||||||
13
tvapp2/node_modules/playwright-core/bin/reinstall_chrome_beta_mac.sh
generated
vendored
13
tvapp2/node_modules/playwright-core/bin/reinstall_chrome_beta_mac.sh
generated
vendored
@@ -1,13 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -e
|
|
||||||
set -x
|
|
||||||
|
|
||||||
rm -rf "/Applications/Google Chrome Beta.app"
|
|
||||||
cd /tmp
|
|
||||||
curl -o ./googlechromebeta.dmg -k https://dl.google.com/chrome/mac/universal/beta/googlechromebeta.dmg
|
|
||||||
hdiutil attach -nobrowse -quiet -noautofsck -noautoopen -mountpoint /Volumes/googlechromebeta.dmg ./googlechromebeta.dmg
|
|
||||||
cp -pR "/Volumes/googlechromebeta.dmg/Google Chrome Beta.app" /Applications
|
|
||||||
hdiutil detach /Volumes/googlechromebeta.dmg
|
|
||||||
rm -rf /tmp/googlechromebeta.dmg
|
|
||||||
|
|
||||||
/Applications/Google\ Chrome\ Beta.app/Contents/MacOS/Google\ Chrome\ Beta --version
|
|
||||||
24
tvapp2/node_modules/playwright-core/bin/reinstall_chrome_beta_win.ps1
generated
vendored
24
tvapp2/node_modules/playwright-core/bin/reinstall_chrome_beta_win.ps1
generated
vendored
@@ -1,24 +0,0 @@
|
|||||||
$ErrorActionPreference = 'Stop'
|
|
||||||
|
|
||||||
$url = 'https://dl.google.com/tag/s/dl/chrome/install/beta/googlechromebetastandaloneenterprise64.msi'
|
|
||||||
|
|
||||||
Write-Host "Downloading Google Chrome Beta"
|
|
||||||
$wc = New-Object net.webclient
|
|
||||||
$msiInstaller = "$env:temp\google-chrome-beta.msi"
|
|
||||||
$wc.Downloadfile($url, $msiInstaller)
|
|
||||||
|
|
||||||
Write-Host "Installing Google Chrome Beta"
|
|
||||||
$arguments = "/i `"$msiInstaller`" /quiet"
|
|
||||||
Start-Process msiexec.exe -ArgumentList $arguments -Wait
|
|
||||||
Remove-Item $msiInstaller
|
|
||||||
|
|
||||||
$suffix = "\\Google\\Chrome Beta\\Application\\chrome.exe"
|
|
||||||
if (Test-Path "${env:ProgramFiles(x86)}$suffix") {
|
|
||||||
(Get-Item "${env:ProgramFiles(x86)}$suffix").VersionInfo
|
|
||||||
} elseif (Test-Path "${env:ProgramFiles}$suffix") {
|
|
||||||
(Get-Item "${env:ProgramFiles}$suffix").VersionInfo
|
|
||||||
} else {
|
|
||||||
Write-Host "ERROR: Failed to install Google Chrome Beta."
|
|
||||||
Write-Host "ERROR: This could be due to insufficient privileges, in which case re-running as Administrator may help."
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
42
tvapp2/node_modules/playwright-core/bin/reinstall_chrome_stable_linux.sh
generated
vendored
42
tvapp2/node_modules/playwright-core/bin/reinstall_chrome_stable_linux.sh
generated
vendored
@@ -1,42 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -e
|
|
||||||
set -x
|
|
||||||
|
|
||||||
if [[ $(arch) == "aarch64" ]]; then
|
|
||||||
echo "ERROR: not supported on Linux Arm64"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$PLAYWRIGHT_HOST_PLATFORM_OVERRIDE" ]; then
|
|
||||||
if [[ ! -f "/etc/os-release" ]]; then
|
|
||||||
echo "ERROR: cannot install on unknown linux distribution (/etc/os-release is missing)"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
ID=$(bash -c 'source /etc/os-release && echo $ID')
|
|
||||||
if [[ "${ID}" != "ubuntu" && "${ID}" != "debian" ]]; then
|
|
||||||
echo "ERROR: cannot install on $ID distribution - only Ubuntu and Debian are supported"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 1. make sure to remove old stable if any.
|
|
||||||
if dpkg --get-selections | grep -q "^google-chrome[[:space:]]*install$" >/dev/null; then
|
|
||||||
apt-get remove -y google-chrome
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 2. Update apt lists (needed to install curl and chrome dependencies)
|
|
||||||
apt-get update
|
|
||||||
|
|
||||||
# 3. Install curl to download chrome
|
|
||||||
if ! command -v curl >/dev/null; then
|
|
||||||
apt-get install -y curl
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 4. download chrome stable from dl.google.com and install it.
|
|
||||||
cd /tmp
|
|
||||||
curl -O https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
|
|
||||||
apt-get install -y ./google-chrome-stable_current_amd64.deb
|
|
||||||
rm -rf ./google-chrome-stable_current_amd64.deb
|
|
||||||
cd -
|
|
||||||
google-chrome --version
|
|
||||||
12
tvapp2/node_modules/playwright-core/bin/reinstall_chrome_stable_mac.sh
generated
vendored
12
tvapp2/node_modules/playwright-core/bin/reinstall_chrome_stable_mac.sh
generated
vendored
@@ -1,12 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -e
|
|
||||||
set -x
|
|
||||||
|
|
||||||
rm -rf "/Applications/Google Chrome.app"
|
|
||||||
cd /tmp
|
|
||||||
curl -o ./googlechrome.dmg -k https://dl.google.com/chrome/mac/universal/stable/GGRO/googlechrome.dmg
|
|
||||||
hdiutil attach -nobrowse -quiet -noautofsck -noautoopen -mountpoint /Volumes/googlechrome.dmg ./googlechrome.dmg
|
|
||||||
cp -pR "/Volumes/googlechrome.dmg/Google Chrome.app" /Applications
|
|
||||||
hdiutil detach /Volumes/googlechrome.dmg
|
|
||||||
rm -rf /tmp/googlechrome.dmg
|
|
||||||
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --version
|
|
||||||
24
tvapp2/node_modules/playwright-core/bin/reinstall_chrome_stable_win.ps1
generated
vendored
24
tvapp2/node_modules/playwright-core/bin/reinstall_chrome_stable_win.ps1
generated
vendored
@@ -1,24 +0,0 @@
|
|||||||
$ErrorActionPreference = 'Stop'
|
|
||||||
$url = 'https://dl.google.com/tag/s/dl/chrome/install/googlechromestandaloneenterprise64.msi'
|
|
||||||
|
|
||||||
$wc = New-Object net.webclient
|
|
||||||
$msiInstaller = "$env:temp\google-chrome.msi"
|
|
||||||
Write-Host "Downloading Google Chrome"
|
|
||||||
$wc.Downloadfile($url, $msiInstaller)
|
|
||||||
|
|
||||||
Write-Host "Installing Google Chrome"
|
|
||||||
$arguments = "/i `"$msiInstaller`" /quiet"
|
|
||||||
Start-Process msiexec.exe -ArgumentList $arguments -Wait
|
|
||||||
Remove-Item $msiInstaller
|
|
||||||
|
|
||||||
|
|
||||||
$suffix = "\\Google\\Chrome\\Application\\chrome.exe"
|
|
||||||
if (Test-Path "${env:ProgramFiles(x86)}$suffix") {
|
|
||||||
(Get-Item "${env:ProgramFiles(x86)}$suffix").VersionInfo
|
|
||||||
} elseif (Test-Path "${env:ProgramFiles}$suffix") {
|
|
||||||
(Get-Item "${env:ProgramFiles}$suffix").VersionInfo
|
|
||||||
} else {
|
|
||||||
Write-Host "ERROR: Failed to install Google Chrome."
|
|
||||||
Write-Host "ERROR: This could be due to insufficient privileges, in which case re-running as Administrator may help."
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
48
tvapp2/node_modules/playwright-core/bin/reinstall_msedge_beta_linux.sh
generated
vendored
48
tvapp2/node_modules/playwright-core/bin/reinstall_msedge_beta_linux.sh
generated
vendored
@@ -1,48 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
set -x
|
|
||||||
|
|
||||||
if [[ $(arch) == "aarch64" ]]; then
|
|
||||||
echo "ERROR: not supported on Linux Arm64"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$PLAYWRIGHT_HOST_PLATFORM_OVERRIDE" ]; then
|
|
||||||
if [[ ! -f "/etc/os-release" ]]; then
|
|
||||||
echo "ERROR: cannot install on unknown linux distribution (/etc/os-release is missing)"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
ID=$(bash -c 'source /etc/os-release && echo $ID')
|
|
||||||
if [[ "${ID}" != "ubuntu" && "${ID}" != "debian" ]]; then
|
|
||||||
echo "ERROR: cannot install on $ID distribution - only Ubuntu and Debian are supported"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 1. make sure to remove old beta if any.
|
|
||||||
if dpkg --get-selections | grep -q "^microsoft-edge-beta[[:space:]]*install$" >/dev/null; then
|
|
||||||
apt-get remove -y microsoft-edge-beta
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 2. Install curl to download Microsoft gpg key
|
|
||||||
if ! command -v curl >/dev/null; then
|
|
||||||
apt-get update
|
|
||||||
apt-get install -y curl
|
|
||||||
fi
|
|
||||||
|
|
||||||
# GnuPG is not preinstalled in slim images
|
|
||||||
if ! command -v gpg >/dev/null; then
|
|
||||||
apt-get update
|
|
||||||
apt-get install -y gpg
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 3. Add the GPG key, the apt repo, update the apt cache, and install the package
|
|
||||||
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /tmp/microsoft.gpg
|
|
||||||
install -o root -g root -m 644 /tmp/microsoft.gpg /etc/apt/trusted.gpg.d/
|
|
||||||
sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge-dev.list'
|
|
||||||
rm /tmp/microsoft.gpg
|
|
||||||
apt-get update && apt-get install -y microsoft-edge-beta
|
|
||||||
|
|
||||||
microsoft-edge-beta --version
|
|
||||||
11
tvapp2/node_modules/playwright-core/bin/reinstall_msedge_beta_mac.sh
generated
vendored
11
tvapp2/node_modules/playwright-core/bin/reinstall_msedge_beta_mac.sh
generated
vendored
@@ -1,11 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -e
|
|
||||||
set -x
|
|
||||||
|
|
||||||
cd /tmp
|
|
||||||
curl -o ./msedge_beta.pkg -k "$1"
|
|
||||||
# Note: there's no way to uninstall previously installed MSEdge.
|
|
||||||
# However, running PKG again seems to update installation.
|
|
||||||
sudo installer -pkg /tmp/msedge_beta.pkg -target /
|
|
||||||
rm -rf /tmp/msedge_beta.pkg
|
|
||||||
/Applications/Microsoft\ Edge\ Beta.app/Contents/MacOS/Microsoft\ Edge\ Beta --version
|
|
||||||
23
tvapp2/node_modules/playwright-core/bin/reinstall_msedge_beta_win.ps1
generated
vendored
23
tvapp2/node_modules/playwright-core/bin/reinstall_msedge_beta_win.ps1
generated
vendored
@@ -1,23 +0,0 @@
|
|||||||
$ErrorActionPreference = 'Stop'
|
|
||||||
$url = $args[0]
|
|
||||||
|
|
||||||
Write-Host "Downloading Microsoft Edge Beta"
|
|
||||||
$wc = New-Object net.webclient
|
|
||||||
$msiInstaller = "$env:temp\microsoft-edge-beta.msi"
|
|
||||||
$wc.Downloadfile($url, $msiInstaller)
|
|
||||||
|
|
||||||
Write-Host "Installing Microsoft Edge Beta"
|
|
||||||
$arguments = "/i `"$msiInstaller`" /quiet"
|
|
||||||
Start-Process msiexec.exe -ArgumentList $arguments -Wait
|
|
||||||
Remove-Item $msiInstaller
|
|
||||||
|
|
||||||
$suffix = "\\Microsoft\\Edge Beta\\Application\\msedge.exe"
|
|
||||||
if (Test-Path "${env:ProgramFiles(x86)}$suffix") {
|
|
||||||
(Get-Item "${env:ProgramFiles(x86)}$suffix").VersionInfo
|
|
||||||
} elseif (Test-Path "${env:ProgramFiles}$suffix") {
|
|
||||||
(Get-Item "${env:ProgramFiles}$suffix").VersionInfo
|
|
||||||
} else {
|
|
||||||
Write-Host "ERROR: Failed to install Microsoft Edge Beta."
|
|
||||||
Write-Host "ERROR: This could be due to insufficient privileges, in which case re-running as Administrator may help."
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
48
tvapp2/node_modules/playwright-core/bin/reinstall_msedge_dev_linux.sh
generated
vendored
48
tvapp2/node_modules/playwright-core/bin/reinstall_msedge_dev_linux.sh
generated
vendored
@@ -1,48 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
set -x
|
|
||||||
|
|
||||||
if [[ $(arch) == "aarch64" ]]; then
|
|
||||||
echo "ERROR: not supported on Linux Arm64"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$PLAYWRIGHT_HOST_PLATFORM_OVERRIDE" ]; then
|
|
||||||
if [[ ! -f "/etc/os-release" ]]; then
|
|
||||||
echo "ERROR: cannot install on unknown linux distribution (/etc/os-release is missing)"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
ID=$(bash -c 'source /etc/os-release && echo $ID')
|
|
||||||
if [[ "${ID}" != "ubuntu" && "${ID}" != "debian" ]]; then
|
|
||||||
echo "ERROR: cannot install on $ID distribution - only Ubuntu and Debian are supported"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 1. make sure to remove old dev if any.
|
|
||||||
if dpkg --get-selections | grep -q "^microsoft-edge-dev[[:space:]]*install$" >/dev/null; then
|
|
||||||
apt-get remove -y microsoft-edge-dev
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 2. Install curl to download Microsoft gpg key
|
|
||||||
if ! command -v curl >/dev/null; then
|
|
||||||
apt-get update
|
|
||||||
apt-get install -y curl
|
|
||||||
fi
|
|
||||||
|
|
||||||
# GnuPG is not preinstalled in slim images
|
|
||||||
if ! command -v gpg >/dev/null; then
|
|
||||||
apt-get update
|
|
||||||
apt-get install -y gpg
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 3. Add the GPG key, the apt repo, update the apt cache, and install the package
|
|
||||||
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /tmp/microsoft.gpg
|
|
||||||
install -o root -g root -m 644 /tmp/microsoft.gpg /etc/apt/trusted.gpg.d/
|
|
||||||
sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge-dev.list'
|
|
||||||
rm /tmp/microsoft.gpg
|
|
||||||
apt-get update && apt-get install -y microsoft-edge-dev
|
|
||||||
|
|
||||||
microsoft-edge-dev --version
|
|
||||||
11
tvapp2/node_modules/playwright-core/bin/reinstall_msedge_dev_mac.sh
generated
vendored
11
tvapp2/node_modules/playwright-core/bin/reinstall_msedge_dev_mac.sh
generated
vendored
@@ -1,11 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -e
|
|
||||||
set -x
|
|
||||||
|
|
||||||
cd /tmp
|
|
||||||
curl -o ./msedge_dev.pkg -k "$1"
|
|
||||||
# Note: there's no way to uninstall previously installed MSEdge.
|
|
||||||
# However, running PKG again seems to update installation.
|
|
||||||
sudo installer -pkg /tmp/msedge_dev.pkg -target /
|
|
||||||
rm -rf /tmp/msedge_dev.pkg
|
|
||||||
/Applications/Microsoft\ Edge\ Dev.app/Contents/MacOS/Microsoft\ Edge\ Dev --version
|
|
||||||
23
tvapp2/node_modules/playwright-core/bin/reinstall_msedge_dev_win.ps1
generated
vendored
23
tvapp2/node_modules/playwright-core/bin/reinstall_msedge_dev_win.ps1
generated
vendored
@@ -1,23 +0,0 @@
|
|||||||
$ErrorActionPreference = 'Stop'
|
|
||||||
$url = $args[0]
|
|
||||||
|
|
||||||
Write-Host "Downloading Microsoft Edge Dev"
|
|
||||||
$wc = New-Object net.webclient
|
|
||||||
$msiInstaller = "$env:temp\microsoft-edge-dev.msi"
|
|
||||||
$wc.Downloadfile($url, $msiInstaller)
|
|
||||||
|
|
||||||
Write-Host "Installing Microsoft Edge Dev"
|
|
||||||
$arguments = "/i `"$msiInstaller`" /quiet"
|
|
||||||
Start-Process msiexec.exe -ArgumentList $arguments -Wait
|
|
||||||
Remove-Item $msiInstaller
|
|
||||||
|
|
||||||
$suffix = "\\Microsoft\\Edge Dev\\Application\\msedge.exe"
|
|
||||||
if (Test-Path "${env:ProgramFiles(x86)}$suffix") {
|
|
||||||
(Get-Item "${env:ProgramFiles(x86)}$suffix").VersionInfo
|
|
||||||
} elseif (Test-Path "${env:ProgramFiles}$suffix") {
|
|
||||||
(Get-Item "${env:ProgramFiles}$suffix").VersionInfo
|
|
||||||
} else {
|
|
||||||
Write-Host "ERROR: Failed to install Microsoft Edge Dev."
|
|
||||||
Write-Host "ERROR: This could be due to insufficient privileges, in which case re-running as Administrator may help."
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
48
tvapp2/node_modules/playwright-core/bin/reinstall_msedge_stable_linux.sh
generated
vendored
48
tvapp2/node_modules/playwright-core/bin/reinstall_msedge_stable_linux.sh
generated
vendored
@@ -1,48 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
set -x
|
|
||||||
|
|
||||||
if [[ $(arch) == "aarch64" ]]; then
|
|
||||||
echo "ERROR: not supported on Linux Arm64"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$PLAYWRIGHT_HOST_PLATFORM_OVERRIDE" ]; then
|
|
||||||
if [[ ! -f "/etc/os-release" ]]; then
|
|
||||||
echo "ERROR: cannot install on unknown linux distribution (/etc/os-release is missing)"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
ID=$(bash -c 'source /etc/os-release && echo $ID')
|
|
||||||
if [[ "${ID}" != "ubuntu" && "${ID}" != "debian" ]]; then
|
|
||||||
echo "ERROR: cannot install on $ID distribution - only Ubuntu and Debian are supported"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 1. make sure to remove old stable if any.
|
|
||||||
if dpkg --get-selections | grep -q "^microsoft-edge-stable[[:space:]]*install$" >/dev/null; then
|
|
||||||
apt-get remove -y microsoft-edge-stable
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 2. Install curl to download Microsoft gpg key
|
|
||||||
if ! command -v curl >/dev/null; then
|
|
||||||
apt-get update
|
|
||||||
apt-get install -y curl
|
|
||||||
fi
|
|
||||||
|
|
||||||
# GnuPG is not preinstalled in slim images
|
|
||||||
if ! command -v gpg >/dev/null; then
|
|
||||||
apt-get update
|
|
||||||
apt-get install -y gpg
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 3. Add the GPG key, the apt repo, update the apt cache, and install the package
|
|
||||||
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /tmp/microsoft.gpg
|
|
||||||
install -o root -g root -m 644 /tmp/microsoft.gpg /etc/apt/trusted.gpg.d/
|
|
||||||
sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge-stable.list'
|
|
||||||
rm /tmp/microsoft.gpg
|
|
||||||
apt-get update && apt-get install -y microsoft-edge-stable
|
|
||||||
|
|
||||||
microsoft-edge-stable --version
|
|
||||||
11
tvapp2/node_modules/playwright-core/bin/reinstall_msedge_stable_mac.sh
generated
vendored
11
tvapp2/node_modules/playwright-core/bin/reinstall_msedge_stable_mac.sh
generated
vendored
@@ -1,11 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -e
|
|
||||||
set -x
|
|
||||||
|
|
||||||
cd /tmp
|
|
||||||
curl -o ./msedge_stable.pkg -k "$1"
|
|
||||||
# Note: there's no way to uninstall previously installed MSEdge.
|
|
||||||
# However, running PKG again seems to update installation.
|
|
||||||
sudo installer -pkg /tmp/msedge_stable.pkg -target /
|
|
||||||
rm -rf /tmp/msedge_stable.pkg
|
|
||||||
/Applications/Microsoft\ Edge.app/Contents/MacOS/Microsoft\ Edge --version
|
|
||||||
24
tvapp2/node_modules/playwright-core/bin/reinstall_msedge_stable_win.ps1
generated
vendored
24
tvapp2/node_modules/playwright-core/bin/reinstall_msedge_stable_win.ps1
generated
vendored
@@ -1,24 +0,0 @@
|
|||||||
$ErrorActionPreference = 'Stop'
|
|
||||||
|
|
||||||
$url = $args[0]
|
|
||||||
|
|
||||||
Write-Host "Downloading Microsoft Edge"
|
|
||||||
$wc = New-Object net.webclient
|
|
||||||
$msiInstaller = "$env:temp\microsoft-edge-stable.msi"
|
|
||||||
$wc.Downloadfile($url, $msiInstaller)
|
|
||||||
|
|
||||||
Write-Host "Installing Microsoft Edge"
|
|
||||||
$arguments = "/i `"$msiInstaller`" /quiet"
|
|
||||||
Start-Process msiexec.exe -ArgumentList $arguments -Wait
|
|
||||||
Remove-Item $msiInstaller
|
|
||||||
|
|
||||||
$suffix = "\\Microsoft\\Edge\\Application\\msedge.exe"
|
|
||||||
if (Test-Path "${env:ProgramFiles(x86)}$suffix") {
|
|
||||||
(Get-Item "${env:ProgramFiles(x86)}$suffix").VersionInfo
|
|
||||||
} elseif (Test-Path "${env:ProgramFiles}$suffix") {
|
|
||||||
(Get-Item "${env:ProgramFiles}$suffix").VersionInfo
|
|
||||||
} else {
|
|
||||||
Write-Host "ERROR: Failed to install Microsoft Edge."
|
|
||||||
Write-Host "ERROR: This could be due to insufficient privileges, in which case re-running as Administrator may help."
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
80
tvapp2/node_modules/playwright-core/browsers.json
generated
vendored
80
tvapp2/node_modules/playwright-core/browsers.json
generated
vendored
@@ -1,80 +0,0 @@
|
|||||||
{
|
|
||||||
"comment": "Do not edit this file, use utils/roll_browser.js",
|
|
||||||
"browsers": [
|
|
||||||
{
|
|
||||||
"name": "chromium",
|
|
||||||
"revision": "1169",
|
|
||||||
"installByDefault": true,
|
|
||||||
"browserVersion": "136.0.7103.25"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "chromium-headless-shell",
|
|
||||||
"revision": "1169",
|
|
||||||
"installByDefault": true,
|
|
||||||
"browserVersion": "136.0.7103.25"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "chromium-tip-of-tree",
|
|
||||||
"revision": "1320",
|
|
||||||
"installByDefault": false,
|
|
||||||
"browserVersion": "137.0.7105.0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "chromium-tip-of-tree-headless-shell",
|
|
||||||
"revision": "1320",
|
|
||||||
"installByDefault": false,
|
|
||||||
"browserVersion": "137.0.7105.0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "firefox",
|
|
||||||
"revision": "1482",
|
|
||||||
"installByDefault": true,
|
|
||||||
"browserVersion": "137.0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "firefox-beta",
|
|
||||||
"revision": "1477",
|
|
||||||
"installByDefault": false,
|
|
||||||
"browserVersion": "137.0b2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "webkit",
|
|
||||||
"revision": "2158",
|
|
||||||
"installByDefault": true,
|
|
||||||
"revisionOverrides": {
|
|
||||||
"debian11-x64": "2105",
|
|
||||||
"debian11-arm64": "2105",
|
|
||||||
"mac10.14": "1446",
|
|
||||||
"mac10.15": "1616",
|
|
||||||
"mac11": "1816",
|
|
||||||
"mac11-arm64": "1816",
|
|
||||||
"mac12": "2009",
|
|
||||||
"mac12-arm64": "2009",
|
|
||||||
"mac13": "2140",
|
|
||||||
"mac13-arm64": "2140",
|
|
||||||
"ubuntu20.04-x64": "2092",
|
|
||||||
"ubuntu20.04-arm64": "2092"
|
|
||||||
},
|
|
||||||
"browserVersion": "18.4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ffmpeg",
|
|
||||||
"revision": "1011",
|
|
||||||
"installByDefault": true,
|
|
||||||
"revisionOverrides": {
|
|
||||||
"mac12": "1010",
|
|
||||||
"mac12-arm64": "1010"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "winldd",
|
|
||||||
"revision": "1007",
|
|
||||||
"installByDefault": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "android",
|
|
||||||
"revision": "1001",
|
|
||||||
"installByDefault": false
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
18
tvapp2/node_modules/playwright-core/cli.js
generated
vendored
18
tvapp2/node_modules/playwright-core/cli.js
generated
vendored
@@ -1,18 +0,0 @@
|
|||||||
#!/usr/bin/env node
|
|
||||||
/**
|
|
||||||
* Copyright (c) Microsoft Corporation.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
const { program } = require('./lib/cli/programWithTestStub');
|
|
||||||
program.parse(process.argv);
|
|
||||||
17
tvapp2/node_modules/playwright-core/index.d.ts
generated
vendored
17
tvapp2/node_modules/playwright-core/index.d.ts
generated
vendored
@@ -1,17 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (c) Microsoft Corporation.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
export * from './types/types';
|
|
||||||
32
tvapp2/node_modules/playwright-core/index.js
generated
vendored
32
tvapp2/node_modules/playwright-core/index.js
generated
vendored
@@ -1,32 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (c) Microsoft Corporation.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
const minimumMajorNodeVersion = 14;
|
|
||||||
const currentNodeVersion = process.versions.node;
|
|
||||||
const semver = currentNodeVersion.split('.');
|
|
||||||
const [major] = [+semver[0]];
|
|
||||||
|
|
||||||
if (major < minimumMajorNodeVersion) {
|
|
||||||
console.error(
|
|
||||||
'You are running Node.js ' +
|
|
||||||
currentNodeVersion +
|
|
||||||
'.\n' +
|
|
||||||
`Playwright requires Node.js ${minimumMajorNodeVersion} or higher. \n` +
|
|
||||||
'Please update your version of Node.js.'
|
|
||||||
);
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = require('./lib/inprocess');
|
|
||||||
28
tvapp2/node_modules/playwright-core/index.mjs
generated
vendored
28
tvapp2/node_modules/playwright-core/index.mjs
generated
vendored
@@ -1,28 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (c) Microsoft Corporation.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import playwright from './index.js';
|
|
||||||
|
|
||||||
export const chromium = playwright.chromium;
|
|
||||||
export const firefox = playwright.firefox;
|
|
||||||
export const webkit = playwright.webkit;
|
|
||||||
export const selectors = playwright.selectors;
|
|
||||||
export const devices = playwright.devices;
|
|
||||||
export const errors = playwright.errors;
|
|
||||||
export const request = playwright.request;
|
|
||||||
export const _electron = playwright._electron;
|
|
||||||
export const _android = playwright._android;
|
|
||||||
export default playwright;
|
|
||||||
63
tvapp2/node_modules/playwright-core/lib/androidServerImpl.js
generated
vendored
63
tvapp2/node_modules/playwright-core/lib/androidServerImpl.js
generated
vendored
@@ -1,63 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var androidServerImpl_exports = {};
|
|
||||||
__export(androidServerImpl_exports, {
|
|
||||||
AndroidServerLauncherImpl: () => AndroidServerLauncherImpl
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(androidServerImpl_exports);
|
|
||||||
var import_playwrightServer = require("./remote/playwrightServer");
|
|
||||||
var import_playwright = require("./server/playwright");
|
|
||||||
var import_crypto = require("./server/utils/crypto");
|
|
||||||
var import_utilsBundle = require("./utilsBundle");
|
|
||||||
class AndroidServerLauncherImpl {
|
|
||||||
async launchServer(options = {}) {
|
|
||||||
const playwright = (0, import_playwright.createPlaywright)({ sdkLanguage: "javascript", isServer: true });
|
|
||||||
let devices = await playwright.android.devices({
|
|
||||||
host: options.adbHost,
|
|
||||||
port: options.adbPort,
|
|
||||||
omitDriverInstall: options.omitDriverInstall
|
|
||||||
});
|
|
||||||
if (devices.length === 0)
|
|
||||||
throw new Error("No devices found");
|
|
||||||
if (options.deviceSerialNumber) {
|
|
||||||
devices = devices.filter((d) => d.serial === options.deviceSerialNumber);
|
|
||||||
if (devices.length === 0)
|
|
||||||
throw new Error(`No device with serial number '${options.deviceSerialNumber}' was found`);
|
|
||||||
}
|
|
||||||
if (devices.length > 1)
|
|
||||||
throw new Error(`More than one device found. Please specify deviceSerialNumber`);
|
|
||||||
const device = devices[0];
|
|
||||||
const path = options.wsPath ? options.wsPath.startsWith("/") ? options.wsPath : `/${options.wsPath}` : `/${(0, import_crypto.createGuid)()}`;
|
|
||||||
const server = new import_playwrightServer.PlaywrightServer({ mode: "launchServer", path, maxConnections: 1, preLaunchedAndroidDevice: device });
|
|
||||||
const wsEndpoint = await server.listen(options.port, options.host);
|
|
||||||
const browserServer = new import_utilsBundle.ws.EventEmitter();
|
|
||||||
browserServer.wsEndpoint = () => wsEndpoint;
|
|
||||||
browserServer.close = () => device.close();
|
|
||||||
browserServer.kill = () => device.close();
|
|
||||||
device.on("close", () => {
|
|
||||||
server.close();
|
|
||||||
browserServer.emit("close");
|
|
||||||
});
|
|
||||||
return browserServer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
AndroidServerLauncherImpl
|
|
||||||
});
|
|
||||||
88
tvapp2/node_modules/playwright-core/lib/browserServerImpl.js
generated
vendored
88
tvapp2/node_modules/playwright-core/lib/browserServerImpl.js
generated
vendored
@@ -1,88 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var browserServerImpl_exports = {};
|
|
||||||
__export(browserServerImpl_exports, {
|
|
||||||
BrowserServerLauncherImpl: () => BrowserServerLauncherImpl
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(browserServerImpl_exports);
|
|
||||||
var import_socksProxy = require("./server/utils/socksProxy");
|
|
||||||
var import_playwrightServer = require("./remote/playwrightServer");
|
|
||||||
var import_helper = require("./server/helper");
|
|
||||||
var import_instrumentation = require("./server/instrumentation");
|
|
||||||
var import_playwright = require("./server/playwright");
|
|
||||||
var import_crypto = require("./server/utils/crypto");
|
|
||||||
var import_stackTrace = require("./utils/isomorphic/stackTrace");
|
|
||||||
var import_utilsBundle = require("./utilsBundle");
|
|
||||||
class BrowserServerLauncherImpl {
|
|
||||||
constructor(browserName) {
|
|
||||||
this._browserName = browserName;
|
|
||||||
}
|
|
||||||
async launchServer(options = {}) {
|
|
||||||
const playwright = (0, import_playwright.createPlaywright)({ sdkLanguage: "javascript", isServer: true });
|
|
||||||
const socksProxy = false ? new SocksProxy() : void 0;
|
|
||||||
playwright.options.socksProxyPort = await socksProxy?.listen(0);
|
|
||||||
const metadata = (0, import_instrumentation.serverSideCallMetadata)();
|
|
||||||
const browser = await playwright[this._browserName].launch(metadata, {
|
|
||||||
...options,
|
|
||||||
ignoreDefaultArgs: Array.isArray(options.ignoreDefaultArgs) ? options.ignoreDefaultArgs : void 0,
|
|
||||||
ignoreAllDefaultArgs: !!options.ignoreDefaultArgs && !Array.isArray(options.ignoreDefaultArgs),
|
|
||||||
env: options.env ? envObjectToArray(options.env) : void 0
|
|
||||||
}, toProtocolLogger(options.logger)).catch((e) => {
|
|
||||||
const log = import_helper.helper.formatBrowserLogs(metadata.log);
|
|
||||||
(0, import_stackTrace.rewriteErrorMessage)(e, `${e.message} Failed to launch browser.${log}`);
|
|
||||||
throw e;
|
|
||||||
});
|
|
||||||
const path = options.wsPath ? options.wsPath.startsWith("/") ? options.wsPath : `/${options.wsPath}` : `/${(0, import_crypto.createGuid)()}`;
|
|
||||||
const server = new import_playwrightServer.PlaywrightServer({ mode: "launchServer", path, maxConnections: Infinity, preLaunchedBrowser: browser, preLaunchedSocksProxy: socksProxy });
|
|
||||||
const wsEndpoint = await server.listen(options.port, options.host);
|
|
||||||
const browserServer = new import_utilsBundle.ws.EventEmitter();
|
|
||||||
browserServer.process = () => browser.options.browserProcess.process;
|
|
||||||
browserServer.wsEndpoint = () => wsEndpoint;
|
|
||||||
browserServer.close = () => browser.options.browserProcess.close();
|
|
||||||
browserServer[Symbol.asyncDispose] = browserServer.close;
|
|
||||||
browserServer.kill = () => browser.options.browserProcess.kill();
|
|
||||||
browserServer._disconnectForTest = () => server.close();
|
|
||||||
browserServer._userDataDirForTest = browser._userDataDirForTest;
|
|
||||||
browser.options.browserProcess.onclose = (exitCode, signal) => {
|
|
||||||
socksProxy?.close().catch(() => {
|
|
||||||
});
|
|
||||||
server.close();
|
|
||||||
browserServer.emit("close", exitCode, signal);
|
|
||||||
};
|
|
||||||
return browserServer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function toProtocolLogger(logger) {
|
|
||||||
return logger ? (direction, message) => {
|
|
||||||
if (logger.isEnabled("protocol", "verbose"))
|
|
||||||
logger.log("protocol", "verbose", (direction === "send" ? "SEND \u25BA " : "\u25C0 RECV ") + JSON.stringify(message), [], {});
|
|
||||||
} : void 0;
|
|
||||||
}
|
|
||||||
function envObjectToArray(env) {
|
|
||||||
const result = [];
|
|
||||||
for (const name in env) {
|
|
||||||
if (!Object.is(env[name], void 0))
|
|
||||||
result.push({ name, value: String(env[name]) });
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
BrowserServerLauncherImpl
|
|
||||||
});
|
|
||||||
97
tvapp2/node_modules/playwright-core/lib/cli/driver.js
generated
vendored
97
tvapp2/node_modules/playwright-core/lib/cli/driver.js
generated
vendored
@@ -1,97 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __create = Object.create;
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __getProtoOf = Object.getPrototypeOf;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
||||||
// If the importer is in node compatibility mode or this is not an ESM
|
|
||||||
// file that has been converted to a CommonJS file using a Babel-
|
|
||||||
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
||||||
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
||||||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
||||||
mod
|
|
||||||
));
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var driver_exports = {};
|
|
||||||
__export(driver_exports, {
|
|
||||||
launchBrowserServer: () => launchBrowserServer,
|
|
||||||
printApiJson: () => printApiJson,
|
|
||||||
runDriver: () => runDriver,
|
|
||||||
runServer: () => runServer
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(driver_exports);
|
|
||||||
var import_fs = __toESM(require("fs"));
|
|
||||||
var playwright = __toESM(require("../.."));
|
|
||||||
var import_pipeTransport = require("../server/utils/pipeTransport");
|
|
||||||
var import_playwrightServer = require("../remote/playwrightServer");
|
|
||||||
var import_server = require("../server");
|
|
||||||
var import_processLauncher = require("../server/utils/processLauncher");
|
|
||||||
function printApiJson() {
|
|
||||||
console.log(JSON.stringify(require("../../api.json")));
|
|
||||||
}
|
|
||||||
function runDriver() {
|
|
||||||
const dispatcherConnection = new import_server.DispatcherConnection();
|
|
||||||
new import_server.RootDispatcher(dispatcherConnection, async (rootScope, { sdkLanguage }) => {
|
|
||||||
const playwright2 = (0, import_server.createPlaywright)({ sdkLanguage });
|
|
||||||
return new import_server.PlaywrightDispatcher(rootScope, playwright2);
|
|
||||||
});
|
|
||||||
const transport = new import_pipeTransport.PipeTransport(process.stdout, process.stdin);
|
|
||||||
transport.onmessage = (message) => dispatcherConnection.dispatch(JSON.parse(message));
|
|
||||||
const isJavaScriptLanguageBinding = !process.env.PW_LANG_NAME || process.env.PW_LANG_NAME === "javascript";
|
|
||||||
const replacer = !isJavaScriptLanguageBinding && String.prototype.toWellFormed ? (key, value) => {
|
|
||||||
if (typeof value === "string")
|
|
||||||
return value.toWellFormed();
|
|
||||||
return value;
|
|
||||||
} : void 0;
|
|
||||||
dispatcherConnection.onmessage = (message) => transport.send(JSON.stringify(message, replacer));
|
|
||||||
transport.onclose = () => {
|
|
||||||
dispatcherConnection.onmessage = () => {
|
|
||||||
};
|
|
||||||
(0, import_processLauncher.gracefullyProcessExitDoNotHang)(0);
|
|
||||||
};
|
|
||||||
process.on("SIGINT", () => {
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async function runServer(options) {
|
|
||||||
const {
|
|
||||||
port,
|
|
||||||
host,
|
|
||||||
path = "/",
|
|
||||||
maxConnections = Infinity,
|
|
||||||
extension
|
|
||||||
} = options;
|
|
||||||
const server = new import_playwrightServer.PlaywrightServer({ mode: extension ? "extension" : "default", path, maxConnections });
|
|
||||||
const wsEndpoint = await server.listen(port, host);
|
|
||||||
process.on("exit", () => server.close().catch(console.error));
|
|
||||||
console.log("Listening on " + wsEndpoint);
|
|
||||||
process.stdin.on("close", () => (0, import_processLauncher.gracefullyProcessExitDoNotHang)(0));
|
|
||||||
}
|
|
||||||
async function launchBrowserServer(browserName, configFile) {
|
|
||||||
let options = {};
|
|
||||||
if (configFile)
|
|
||||||
options = JSON.parse(import_fs.default.readFileSync(configFile).toString());
|
|
||||||
const browserType = playwright[browserName];
|
|
||||||
const server = await browserType.launchServer(options);
|
|
||||||
console.log(server.wsEndpoint());
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
launchBrowserServer,
|
|
||||||
printApiJson,
|
|
||||||
runDriver,
|
|
||||||
runServer
|
|
||||||
});
|
|
||||||
567
tvapp2/node_modules/playwright-core/lib/cli/program.js
generated
vendored
567
tvapp2/node_modules/playwright-core/lib/cli/program.js
generated
vendored
@@ -1,567 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __create = Object.create;
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __getProtoOf = Object.getPrototypeOf;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
||||||
// If the importer is in node compatibility mode or this is not an ESM
|
|
||||||
// file that has been converted to a CommonJS file using a Babel-
|
|
||||||
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
||||||
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
||||||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
||||||
mod
|
|
||||||
));
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var program_exports = {};
|
|
||||||
__export(program_exports, {
|
|
||||||
program: () => import_utilsBundle2.program
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(program_exports);
|
|
||||||
var import_fs = __toESM(require("fs"));
|
|
||||||
var import_os = __toESM(require("os"));
|
|
||||||
var import_path = __toESM(require("path"));
|
|
||||||
var playwright = __toESM(require("../.."));
|
|
||||||
var import_driver = require("./driver");
|
|
||||||
var import_server = require("../server");
|
|
||||||
var import_utils = require("../utils");
|
|
||||||
var import_traceViewer = require("../server/trace/viewer/traceViewer");
|
|
||||||
var import_utils2 = require("../utils");
|
|
||||||
var import_ascii = require("../server/utils/ascii");
|
|
||||||
var import_utilsBundle = require("../utilsBundle");
|
|
||||||
var import_utilsBundle2 = require("../utilsBundle");
|
|
||||||
const packageJSON = require("../../package.json");
|
|
||||||
import_utilsBundle.program.version("Version " + (process.env.PW_CLI_DISPLAY_VERSION || packageJSON.version)).name(buildBasePlaywrightCLICommand(process.env.PW_LANG_NAME));
|
|
||||||
import_utilsBundle.program.command("mark-docker-image [dockerImageNameTemplate]", { hidden: true }).description("mark docker image").allowUnknownOption(true).action(function(dockerImageNameTemplate) {
|
|
||||||
(0, import_utils2.assert)(dockerImageNameTemplate, "dockerImageNameTemplate is required");
|
|
||||||
(0, import_server.writeDockerVersion)(dockerImageNameTemplate).catch(logErrorAndExit);
|
|
||||||
});
|
|
||||||
commandWithOpenOptions("open [url]", "open page in browser specified via -b, --browser", []).action(function(url, options) {
|
|
||||||
open(options, url, codegenId()).catch(logErrorAndExit);
|
|
||||||
}).addHelpText("afterAll", `
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
$ open
|
|
||||||
$ open -b webkit https://example.com`);
|
|
||||||
commandWithOpenOptions(
|
|
||||||
"codegen [url]",
|
|
||||||
"open page and generate code for user actions",
|
|
||||||
[
|
|
||||||
["-o, --output <file name>", "saves the generated script to a file"],
|
|
||||||
["--target <language>", `language to generate, one of javascript, playwright-test, python, python-async, python-pytest, csharp, csharp-mstest, csharp-nunit, java, java-junit`, codegenId()],
|
|
||||||
["--test-id-attribute <attributeName>", "use the specified attribute to generate data test ID selectors"]
|
|
||||||
]
|
|
||||||
).action(function(url, options) {
|
|
||||||
codegen(options, url).catch(logErrorAndExit);
|
|
||||||
}).addHelpText("afterAll", `
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
$ codegen
|
|
||||||
$ codegen --target=python
|
|
||||||
$ codegen -b webkit https://example.com`);
|
|
||||||
function suggestedBrowsersToInstall() {
|
|
||||||
return import_server.registry.executables().filter((e) => e.installType !== "none" && e.type !== "tool").map((e) => e.name).join(", ");
|
|
||||||
}
|
|
||||||
function defaultBrowsersToInstall(options) {
|
|
||||||
let executables = import_server.registry.defaultExecutables();
|
|
||||||
if (options.noShell)
|
|
||||||
executables = executables.filter((e) => e.name !== "chromium-headless-shell");
|
|
||||||
if (options.onlyShell)
|
|
||||||
executables = executables.filter((e) => e.name !== "chromium");
|
|
||||||
return executables;
|
|
||||||
}
|
|
||||||
function checkBrowsersToInstall(args, options) {
|
|
||||||
if (options.noShell && options.onlyShell)
|
|
||||||
throw new Error(`Only one of --no-shell and --only-shell can be specified`);
|
|
||||||
const faultyArguments = [];
|
|
||||||
const executables = [];
|
|
||||||
const handleArgument = (arg) => {
|
|
||||||
const executable = import_server.registry.findExecutable(arg);
|
|
||||||
if (!executable || executable.installType === "none")
|
|
||||||
faultyArguments.push(arg);
|
|
||||||
else
|
|
||||||
executables.push(executable);
|
|
||||||
if (executable?.browserName === "chromium")
|
|
||||||
executables.push(import_server.registry.findExecutable("ffmpeg"));
|
|
||||||
};
|
|
||||||
for (const arg of args) {
|
|
||||||
if (arg === "chromium") {
|
|
||||||
if (!options.onlyShell)
|
|
||||||
handleArgument("chromium");
|
|
||||||
if (!options.noShell)
|
|
||||||
handleArgument("chromium-headless-shell");
|
|
||||||
} else {
|
|
||||||
handleArgument(arg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (process.platform === "win32")
|
|
||||||
executables.push(import_server.registry.findExecutable("winldd"));
|
|
||||||
if (faultyArguments.length)
|
|
||||||
throw new Error(`Invalid installation targets: ${faultyArguments.map((name) => `'${name}'`).join(", ")}. Expecting one of: ${suggestedBrowsersToInstall()}`);
|
|
||||||
return executables;
|
|
||||||
}
|
|
||||||
import_utilsBundle.program.command("install [browser...]").description("ensure browsers necessary for this version of Playwright are installed").option("--with-deps", "install system dependencies for browsers").option("--dry-run", "do not execute installation, only print information").option("--force", "force reinstall of stable browser channels").option("--only-shell", "only install headless shell when installing chromium").option("--no-shell", "do not install chromium headless shell").action(async function(args, options) {
|
|
||||||
if (options.shell === false)
|
|
||||||
options.noShell = true;
|
|
||||||
if ((0, import_utils.isLikelyNpxGlobal)()) {
|
|
||||||
console.error((0, import_ascii.wrapInASCIIBox)([
|
|
||||||
`WARNING: It looks like you are running 'npx playwright install' without first`,
|
|
||||||
`installing your project's dependencies.`,
|
|
||||||
``,
|
|
||||||
`To avoid unexpected behavior, please install your dependencies first, and`,
|
|
||||||
`then run Playwright's install command:`,
|
|
||||||
``,
|
|
||||||
` npm install`,
|
|
||||||
` npx playwright install`,
|
|
||||||
``,
|
|
||||||
`If your project does not yet depend on Playwright, first install the`,
|
|
||||||
`applicable npm package (most commonly @playwright/test), and`,
|
|
||||||
`then run Playwright's install command to download the browsers:`,
|
|
||||||
``,
|
|
||||||
` npm install @playwright/test`,
|
|
||||||
` npx playwright install`,
|
|
||||||
``
|
|
||||||
].join("\n"), 1));
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
const hasNoArguments = !args.length;
|
|
||||||
const executables = hasNoArguments ? defaultBrowsersToInstall(options) : checkBrowsersToInstall(args, options);
|
|
||||||
if (options.withDeps)
|
|
||||||
await import_server.registry.installDeps(executables, !!options.dryRun);
|
|
||||||
if (options.dryRun) {
|
|
||||||
for (const executable of executables) {
|
|
||||||
const version = executable.browserVersion ? `version ` + executable.browserVersion : "";
|
|
||||||
console.log(`browser: ${executable.name}${version ? " " + version : ""}`);
|
|
||||||
console.log(` Install location: ${executable.directory ?? "<system>"}`);
|
|
||||||
if (executable.downloadURLs?.length) {
|
|
||||||
const [url, ...fallbacks] = executable.downloadURLs;
|
|
||||||
console.log(` Download url: ${url}`);
|
|
||||||
for (let i = 0; i < fallbacks.length; ++i)
|
|
||||||
console.log(` Download fallback ${i + 1}: ${fallbacks[i]}`);
|
|
||||||
}
|
|
||||||
console.log(``);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
const forceReinstall = hasNoArguments ? false : !!options.force;
|
|
||||||
await import_server.registry.install(executables, forceReinstall);
|
|
||||||
await import_server.registry.validateHostRequirementsForExecutablesIfNeeded(executables, process.env.PW_LANG_NAME || "javascript").catch((e) => {
|
|
||||||
e.name = "Playwright Host validation warning";
|
|
||||||
console.error(e);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
console.log(`Failed to install browsers
|
|
||||||
${e}`);
|
|
||||||
(0, import_utils.gracefullyProcessExitDoNotHang)(1);
|
|
||||||
}
|
|
||||||
}).addHelpText("afterAll", `
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
- $ install
|
|
||||||
Install default browsers.
|
|
||||||
|
|
||||||
- $ install chrome firefox
|
|
||||||
Install custom browsers, supports ${suggestedBrowsersToInstall()}.`);
|
|
||||||
import_utilsBundle.program.command("uninstall").description("Removes browsers used by this installation of Playwright from the system (chromium, firefox, webkit, ffmpeg). This does not include branded channels.").option("--all", "Removes all browsers used by any Playwright installation from the system.").action(async (options) => {
|
|
||||||
delete process.env.PLAYWRIGHT_SKIP_BROWSER_GC;
|
|
||||||
await import_server.registry.uninstall(!!options.all).then(({ numberOfBrowsersLeft }) => {
|
|
||||||
if (!options.all && numberOfBrowsersLeft > 0) {
|
|
||||||
console.log("Successfully uninstalled Playwright browsers for the current Playwright installation.");
|
|
||||||
console.log(`There are still ${numberOfBrowsersLeft} browsers left, used by other Playwright installations.
|
|
||||||
To uninstall Playwright browsers for all installations, re-run with --all flag.`);
|
|
||||||
}
|
|
||||||
}).catch(logErrorAndExit);
|
|
||||||
});
|
|
||||||
import_utilsBundle.program.command("install-deps [browser...]").description("install dependencies necessary to run browsers (will ask for sudo permissions)").option("--dry-run", "Do not execute installation commands, only print them").action(async function(args, options) {
|
|
||||||
try {
|
|
||||||
if (!args.length)
|
|
||||||
await import_server.registry.installDeps(defaultBrowsersToInstall({}), !!options.dryRun);
|
|
||||||
else
|
|
||||||
await import_server.registry.installDeps(checkBrowsersToInstall(args, {}), !!options.dryRun);
|
|
||||||
} catch (e) {
|
|
||||||
console.log(`Failed to install browser dependencies
|
|
||||||
${e}`);
|
|
||||||
(0, import_utils.gracefullyProcessExitDoNotHang)(1);
|
|
||||||
}
|
|
||||||
}).addHelpText("afterAll", `
|
|
||||||
Examples:
|
|
||||||
- $ install-deps
|
|
||||||
Install dependencies for default browsers.
|
|
||||||
|
|
||||||
- $ install-deps chrome firefox
|
|
||||||
Install dependencies for specific browsers, supports ${suggestedBrowsersToInstall()}.`);
|
|
||||||
const browsers = [
|
|
||||||
{ alias: "cr", name: "Chromium", type: "chromium" },
|
|
||||||
{ alias: "ff", name: "Firefox", type: "firefox" },
|
|
||||||
{ alias: "wk", name: "WebKit", type: "webkit" }
|
|
||||||
];
|
|
||||||
for (const { alias, name, type } of browsers) {
|
|
||||||
commandWithOpenOptions(`${alias} [url]`, `open page in ${name}`, []).action(function(url, options) {
|
|
||||||
open({ ...options, browser: type }, url, options.target).catch(logErrorAndExit);
|
|
||||||
}).addHelpText("afterAll", `
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
$ ${alias} https://example.com`);
|
|
||||||
}
|
|
||||||
commandWithOpenOptions(
|
|
||||||
"screenshot <url> <filename>",
|
|
||||||
"capture a page screenshot",
|
|
||||||
[
|
|
||||||
["--wait-for-selector <selector>", "wait for selector before taking a screenshot"],
|
|
||||||
["--wait-for-timeout <timeout>", "wait for timeout in milliseconds before taking a screenshot"],
|
|
||||||
["--full-page", "whether to take a full page screenshot (entire scrollable area)"]
|
|
||||||
]
|
|
||||||
).action(function(url, filename, command) {
|
|
||||||
screenshot(command, command, url, filename).catch(logErrorAndExit);
|
|
||||||
}).addHelpText("afterAll", `
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
$ screenshot -b webkit https://example.com example.png`);
|
|
||||||
commandWithOpenOptions(
|
|
||||||
"pdf <url> <filename>",
|
|
||||||
"save page as pdf",
|
|
||||||
[
|
|
||||||
["--paper-format <format>", "paper format: Letter, Legal, Tabloid, Ledger, A0, A1, A2, A3, A4, A5, A6"],
|
|
||||||
["--wait-for-selector <selector>", "wait for given selector before saving as pdf"],
|
|
||||||
["--wait-for-timeout <timeout>", "wait for given timeout in milliseconds before saving as pdf"]
|
|
||||||
]
|
|
||||||
).action(function(url, filename, options) {
|
|
||||||
pdf(options, options, url, filename).catch(logErrorAndExit);
|
|
||||||
}).addHelpText("afterAll", `
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
$ pdf https://example.com example.pdf`);
|
|
||||||
import_utilsBundle.program.command("run-driver", { hidden: true }).action(function(options) {
|
|
||||||
(0, import_driver.runDriver)();
|
|
||||||
});
|
|
||||||
import_utilsBundle.program.command("run-server").option("--port <port>", "Server port").option("--host <host>", "Server host").option("--path <path>", "Endpoint Path", "/").option("--max-clients <maxClients>", "Maximum clients").option("--mode <mode>", 'Server mode, either "default" or "extension"').action(function(options) {
|
|
||||||
(0, import_driver.runServer)({
|
|
||||||
port: options.port ? +options.port : void 0,
|
|
||||||
host: options.host,
|
|
||||||
path: options.path,
|
|
||||||
maxConnections: options.maxClients ? +options.maxClients : Infinity,
|
|
||||||
extension: options.mode === "extension" || !!process.env.PW_EXTENSION_MODE
|
|
||||||
}).catch(logErrorAndExit);
|
|
||||||
});
|
|
||||||
import_utilsBundle.program.command("print-api-json", { hidden: true }).action(function(options) {
|
|
||||||
(0, import_driver.printApiJson)();
|
|
||||||
});
|
|
||||||
import_utilsBundle.program.command("launch-server", { hidden: true }).requiredOption("--browser <browserName>", 'Browser name, one of "chromium", "firefox" or "webkit"').option("--config <path-to-config-file>", "JSON file with launchServer options").action(function(options) {
|
|
||||||
(0, import_driver.launchBrowserServer)(options.browser, options.config);
|
|
||||||
});
|
|
||||||
import_utilsBundle.program.command("show-trace [trace...]").option("-b, --browser <browserType>", "browser to use, one of cr, chromium, ff, firefox, wk, webkit", "chromium").option("-h, --host <host>", "Host to serve trace on; specifying this option opens trace in a browser tab").option("-p, --port <port>", "Port to serve trace on, 0 for any free port; specifying this option opens trace in a browser tab").option("--stdin", "Accept trace URLs over stdin to update the viewer").description("show trace viewer").action(function(traces, options) {
|
|
||||||
if (options.browser === "cr")
|
|
||||||
options.browser = "chromium";
|
|
||||||
if (options.browser === "ff")
|
|
||||||
options.browser = "firefox";
|
|
||||||
if (options.browser === "wk")
|
|
||||||
options.browser = "webkit";
|
|
||||||
const openOptions = {
|
|
||||||
host: options.host,
|
|
||||||
port: +options.port,
|
|
||||||
isServer: !!options.stdin
|
|
||||||
};
|
|
||||||
if (options.port !== void 0 || options.host !== void 0)
|
|
||||||
(0, import_traceViewer.runTraceInBrowser)(traces, openOptions).catch(logErrorAndExit);
|
|
||||||
else
|
|
||||||
(0, import_traceViewer.runTraceViewerApp)(traces, options.browser, openOptions, true).catch(logErrorAndExit);
|
|
||||||
}).addHelpText("afterAll", `
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
$ show-trace https://example.com/trace.zip`);
|
|
||||||
async function launchContext(options, extraOptions) {
|
|
||||||
validateOptions(options);
|
|
||||||
const browserType = lookupBrowserType(options);
|
|
||||||
const launchOptions = extraOptions;
|
|
||||||
if (options.channel)
|
|
||||||
launchOptions.channel = options.channel;
|
|
||||||
launchOptions.handleSIGINT = false;
|
|
||||||
const contextOptions = (
|
|
||||||
// Copy the device descriptor since we have to compare and modify the options.
|
|
||||||
options.device ? { ...playwright.devices[options.device] } : {}
|
|
||||||
);
|
|
||||||
if (!extraOptions.headless)
|
|
||||||
contextOptions.deviceScaleFactor = import_os.default.platform() === "darwin" ? 2 : 1;
|
|
||||||
if (browserType.name() === "webkit" && process.platform === "linux") {
|
|
||||||
delete contextOptions.hasTouch;
|
|
||||||
delete contextOptions.isMobile;
|
|
||||||
}
|
|
||||||
if (contextOptions.isMobile && browserType.name() === "firefox")
|
|
||||||
contextOptions.isMobile = void 0;
|
|
||||||
if (options.blockServiceWorkers)
|
|
||||||
contextOptions.serviceWorkers = "block";
|
|
||||||
if (options.proxyServer) {
|
|
||||||
launchOptions.proxy = {
|
|
||||||
server: options.proxyServer
|
|
||||||
};
|
|
||||||
if (options.proxyBypass)
|
|
||||||
launchOptions.proxy.bypass = options.proxyBypass;
|
|
||||||
}
|
|
||||||
const browser = await browserType.launch(launchOptions);
|
|
||||||
if (process.env.PWTEST_CLI_IS_UNDER_TEST) {
|
|
||||||
process._didSetSourcesForTest = (text) => {
|
|
||||||
process.stdout.write("\n-------------8<-------------\n");
|
|
||||||
process.stdout.write(text);
|
|
||||||
process.stdout.write("\n-------------8<-------------\n");
|
|
||||||
const autoExitCondition = process.env.PWTEST_CLI_AUTO_EXIT_WHEN;
|
|
||||||
if (autoExitCondition && text.includes(autoExitCondition))
|
|
||||||
closeBrowser();
|
|
||||||
};
|
|
||||||
const logs = [];
|
|
||||||
require("playwright-core/lib/utilsBundle").debug.log = (...args) => {
|
|
||||||
const line = require("util").format(...args) + "\n";
|
|
||||||
logs.push(line);
|
|
||||||
process.stderr.write(line);
|
|
||||||
};
|
|
||||||
browser.on("disconnected", () => {
|
|
||||||
const hasCrashLine = logs.some((line) => line.includes("process did exit:") && !line.includes("process did exit: exitCode=0, signal=null"));
|
|
||||||
if (hasCrashLine) {
|
|
||||||
process.stderr.write("Detected browser crash.\n");
|
|
||||||
(0, import_utils.gracefullyProcessExitDoNotHang)(1);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (options.viewportSize) {
|
|
||||||
try {
|
|
||||||
const [width, height] = options.viewportSize.split(",").map((n) => +n);
|
|
||||||
if (isNaN(width) || isNaN(height))
|
|
||||||
throw new Error("bad values");
|
|
||||||
contextOptions.viewport = { width, height };
|
|
||||||
} catch (e) {
|
|
||||||
throw new Error('Invalid viewport size format: use "width,height", for example --viewport-size="800,600"');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (options.geolocation) {
|
|
||||||
try {
|
|
||||||
const [latitude, longitude] = options.geolocation.split(",").map((n) => parseFloat(n.trim()));
|
|
||||||
contextOptions.geolocation = {
|
|
||||||
latitude,
|
|
||||||
longitude
|
|
||||||
};
|
|
||||||
} catch (e) {
|
|
||||||
throw new Error('Invalid geolocation format, should be "lat,long". For example --geolocation="37.819722,-122.478611"');
|
|
||||||
}
|
|
||||||
contextOptions.permissions = ["geolocation"];
|
|
||||||
}
|
|
||||||
if (options.userAgent)
|
|
||||||
contextOptions.userAgent = options.userAgent;
|
|
||||||
if (options.lang)
|
|
||||||
contextOptions.locale = options.lang;
|
|
||||||
if (options.colorScheme)
|
|
||||||
contextOptions.colorScheme = options.colorScheme;
|
|
||||||
if (options.timezone)
|
|
||||||
contextOptions.timezoneId = options.timezone;
|
|
||||||
if (options.loadStorage)
|
|
||||||
contextOptions.storageState = options.loadStorage;
|
|
||||||
if (options.ignoreHttpsErrors)
|
|
||||||
contextOptions.ignoreHTTPSErrors = true;
|
|
||||||
if (options.saveHar) {
|
|
||||||
contextOptions.recordHar = { path: import_path.default.resolve(process.cwd(), options.saveHar), mode: "minimal" };
|
|
||||||
if (options.saveHarGlob)
|
|
||||||
contextOptions.recordHar.urlFilter = options.saveHarGlob;
|
|
||||||
contextOptions.serviceWorkers = "block";
|
|
||||||
}
|
|
||||||
const context = await browser.newContext(contextOptions);
|
|
||||||
let closingBrowser = false;
|
|
||||||
async function closeBrowser() {
|
|
||||||
if (closingBrowser)
|
|
||||||
return;
|
|
||||||
closingBrowser = true;
|
|
||||||
if (options.saveStorage)
|
|
||||||
await context.storageState({ path: options.saveStorage }).catch((e) => null);
|
|
||||||
if (options.saveHar)
|
|
||||||
await context.close();
|
|
||||||
await browser.close();
|
|
||||||
}
|
|
||||||
context.on("page", (page) => {
|
|
||||||
page.on("dialog", () => {
|
|
||||||
});
|
|
||||||
page.on("close", () => {
|
|
||||||
const hasPage = browser.contexts().some((context2) => context2.pages().length > 0);
|
|
||||||
if (hasPage)
|
|
||||||
return;
|
|
||||||
closeBrowser().catch(() => {
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
process.on("SIGINT", async () => {
|
|
||||||
await closeBrowser();
|
|
||||||
(0, import_utils.gracefullyProcessExitDoNotHang)(130);
|
|
||||||
});
|
|
||||||
const timeout = options.timeout ? parseInt(options.timeout, 10) : 0;
|
|
||||||
context.setDefaultTimeout(timeout);
|
|
||||||
context.setDefaultNavigationTimeout(timeout);
|
|
||||||
delete launchOptions.headless;
|
|
||||||
delete launchOptions.executablePath;
|
|
||||||
delete launchOptions.handleSIGINT;
|
|
||||||
delete contextOptions.deviceScaleFactor;
|
|
||||||
return { browser, browserName: browserType.name(), context, contextOptions, launchOptions };
|
|
||||||
}
|
|
||||||
async function openPage(context, url) {
|
|
||||||
const page = await context.newPage();
|
|
||||||
if (url) {
|
|
||||||
if (import_fs.default.existsSync(url))
|
|
||||||
url = "file://" + import_path.default.resolve(url);
|
|
||||||
else if (!url.startsWith("http") && !url.startsWith("file://") && !url.startsWith("about:") && !url.startsWith("data:"))
|
|
||||||
url = "http://" + url;
|
|
||||||
await page.goto(url).catch((error) => {
|
|
||||||
if (process.env.PWTEST_CLI_AUTO_EXIT_WHEN) {
|
|
||||||
} else {
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return page;
|
|
||||||
}
|
|
||||||
async function open(options, url, language) {
|
|
||||||
const { context, launchOptions, contextOptions } = await launchContext(options, { headless: !!process.env.PWTEST_CLI_HEADLESS, executablePath: process.env.PWTEST_CLI_EXECUTABLE_PATH });
|
|
||||||
await context._enableRecorder({
|
|
||||||
language,
|
|
||||||
launchOptions,
|
|
||||||
contextOptions,
|
|
||||||
device: options.device,
|
|
||||||
saveStorage: options.saveStorage,
|
|
||||||
handleSIGINT: false
|
|
||||||
});
|
|
||||||
await openPage(context, url);
|
|
||||||
}
|
|
||||||
async function codegen(options, url) {
|
|
||||||
const { target: language, output: outputFile, testIdAttribute: testIdAttributeName } = options;
|
|
||||||
const tracesDir = import_path.default.join(import_os.default.tmpdir(), `playwright-recorder-trace-${Date.now()}`);
|
|
||||||
const { context, launchOptions, contextOptions } = await launchContext(options, {
|
|
||||||
headless: !!process.env.PWTEST_CLI_HEADLESS,
|
|
||||||
executablePath: process.env.PWTEST_CLI_EXECUTABLE_PATH,
|
|
||||||
tracesDir
|
|
||||||
});
|
|
||||||
import_utilsBundle.dotenv.config({ path: "playwright.env" });
|
|
||||||
await context._enableRecorder({
|
|
||||||
language,
|
|
||||||
launchOptions,
|
|
||||||
contextOptions,
|
|
||||||
device: options.device,
|
|
||||||
saveStorage: options.saveStorage,
|
|
||||||
mode: "recording",
|
|
||||||
testIdAttributeName,
|
|
||||||
outputFile: outputFile ? import_path.default.resolve(outputFile) : void 0,
|
|
||||||
handleSIGINT: false
|
|
||||||
});
|
|
||||||
await openPage(context, url);
|
|
||||||
}
|
|
||||||
async function waitForPage(page, captureOptions) {
|
|
||||||
if (captureOptions.waitForSelector) {
|
|
||||||
console.log(`Waiting for selector ${captureOptions.waitForSelector}...`);
|
|
||||||
await page.waitForSelector(captureOptions.waitForSelector);
|
|
||||||
}
|
|
||||||
if (captureOptions.waitForTimeout) {
|
|
||||||
console.log(`Waiting for timeout ${captureOptions.waitForTimeout}...`);
|
|
||||||
await page.waitForTimeout(parseInt(captureOptions.waitForTimeout, 10));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
async function screenshot(options, captureOptions, url, path2) {
|
|
||||||
const { context } = await launchContext(options, { headless: true });
|
|
||||||
console.log("Navigating to " + url);
|
|
||||||
const page = await openPage(context, url);
|
|
||||||
await waitForPage(page, captureOptions);
|
|
||||||
console.log("Capturing screenshot into " + path2);
|
|
||||||
await page.screenshot({ path: path2, fullPage: !!captureOptions.fullPage });
|
|
||||||
await page.close();
|
|
||||||
}
|
|
||||||
async function pdf(options, captureOptions, url, path2) {
|
|
||||||
if (options.browser !== "chromium")
|
|
||||||
throw new Error("PDF creation is only working with Chromium");
|
|
||||||
const { context } = await launchContext({ ...options, browser: "chromium" }, { headless: true });
|
|
||||||
console.log("Navigating to " + url);
|
|
||||||
const page = await openPage(context, url);
|
|
||||||
await waitForPage(page, captureOptions);
|
|
||||||
console.log("Saving as pdf into " + path2);
|
|
||||||
await page.pdf({ path: path2, format: captureOptions.paperFormat });
|
|
||||||
await page.close();
|
|
||||||
}
|
|
||||||
function lookupBrowserType(options) {
|
|
||||||
let name = options.browser;
|
|
||||||
if (options.device) {
|
|
||||||
const device = playwright.devices[options.device];
|
|
||||||
name = device.defaultBrowserType;
|
|
||||||
}
|
|
||||||
let browserType;
|
|
||||||
switch (name) {
|
|
||||||
case "chromium":
|
|
||||||
browserType = playwright.chromium;
|
|
||||||
break;
|
|
||||||
case "webkit":
|
|
||||||
browserType = playwright.webkit;
|
|
||||||
break;
|
|
||||||
case "firefox":
|
|
||||||
browserType = playwright.firefox;
|
|
||||||
break;
|
|
||||||
case "cr":
|
|
||||||
browserType = playwright.chromium;
|
|
||||||
break;
|
|
||||||
case "wk":
|
|
||||||
browserType = playwright.webkit;
|
|
||||||
break;
|
|
||||||
case "ff":
|
|
||||||
browserType = playwright.firefox;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (browserType)
|
|
||||||
return browserType;
|
|
||||||
import_utilsBundle.program.help();
|
|
||||||
}
|
|
||||||
function validateOptions(options) {
|
|
||||||
if (options.device && !(options.device in playwright.devices)) {
|
|
||||||
const lines = [`Device descriptor not found: '${options.device}', available devices are:`];
|
|
||||||
for (const name in playwright.devices)
|
|
||||||
lines.push(` "${name}"`);
|
|
||||||
throw new Error(lines.join("\n"));
|
|
||||||
}
|
|
||||||
if (options.colorScheme && !["light", "dark"].includes(options.colorScheme))
|
|
||||||
throw new Error('Invalid color scheme, should be one of "light", "dark"');
|
|
||||||
}
|
|
||||||
function logErrorAndExit(e) {
|
|
||||||
if (process.env.PWDEBUGIMPL)
|
|
||||||
console.error(e);
|
|
||||||
else
|
|
||||||
console.error(e.name + ": " + e.message);
|
|
||||||
(0, import_utils.gracefullyProcessExitDoNotHang)(1);
|
|
||||||
}
|
|
||||||
function codegenId() {
|
|
||||||
return process.env.PW_LANG_NAME || "playwright-test";
|
|
||||||
}
|
|
||||||
function commandWithOpenOptions(command, description, options) {
|
|
||||||
let result = import_utilsBundle.program.command(command).description(description);
|
|
||||||
for (const option of options)
|
|
||||||
result = result.option(option[0], ...option.slice(1));
|
|
||||||
return result.option("-b, --browser <browserType>", "browser to use, one of cr, chromium, ff, firefox, wk, webkit", "chromium").option("--block-service-workers", "block service workers").option("--channel <channel>", 'Chromium distribution channel, "chrome", "chrome-beta", "msedge-dev", etc').option("--color-scheme <scheme>", 'emulate preferred color scheme, "light" or "dark"').option("--device <deviceName>", 'emulate device, for example "iPhone 11"').option("--geolocation <coordinates>", 'specify geolocation coordinates, for example "37.819722,-122.478611"').option("--ignore-https-errors", "ignore https errors").option("--load-storage <filename>", "load context storage state from the file, previously saved with --save-storage").option("--lang <language>", 'specify language / locale, for example "en-GB"').option("--proxy-server <proxy>", 'specify proxy server, for example "http://myproxy:3128" or "socks5://myproxy:8080"').option("--proxy-bypass <bypass>", 'comma-separated domains to bypass proxy, for example ".com,chromium.org,.domain.com"').option("--save-har <filename>", "save HAR file with all network activity at the end").option("--save-har-glob <glob pattern>", "filter entries in the HAR by matching url against this glob pattern").option("--save-storage <filename>", "save context storage state at the end, for later use with --load-storage").option("--timezone <time zone>", 'time zone to emulate, for example "Europe/Rome"').option("--timeout <timeout>", "timeout for Playwright actions in milliseconds, no timeout by default").option("--user-agent <ua string>", "specify user agent string").option("--viewport-size <size>", 'specify browser viewport size in pixels, for example "1280, 720"');
|
|
||||||
}
|
|
||||||
function buildBasePlaywrightCLICommand(cliTargetLang) {
|
|
||||||
switch (cliTargetLang) {
|
|
||||||
case "python":
|
|
||||||
return `playwright`;
|
|
||||||
case "java":
|
|
||||||
return `mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="...options.."`;
|
|
||||||
case "csharp":
|
|
||||||
return `pwsh bin/Debug/netX/playwright.ps1`;
|
|
||||||
default: {
|
|
||||||
const packageManagerCommand = (0, import_utils2.getPackageManagerExecCommand)();
|
|
||||||
return `${packageManagerCommand} playwright`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
program
|
|
||||||
});
|
|
||||||
74
tvapp2/node_modules/playwright-core/lib/cli/programWithTestStub.js
generated
vendored
74
tvapp2/node_modules/playwright-core/lib/cli/programWithTestStub.js
generated
vendored
@@ -1,74 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var programWithTestStub_exports = {};
|
|
||||||
__export(programWithTestStub_exports, {
|
|
||||||
program: () => import_program2.program
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(programWithTestStub_exports);
|
|
||||||
var import_processLauncher = require("../server/utils/processLauncher");
|
|
||||||
var import_utils = require("../utils");
|
|
||||||
var import_program = require("./program");
|
|
||||||
var import_program2 = require("./program");
|
|
||||||
function printPlaywrightTestError(command) {
|
|
||||||
const packages = [];
|
|
||||||
for (const pkg of ["playwright", "playwright-chromium", "playwright-firefox", "playwright-webkit"]) {
|
|
||||||
try {
|
|
||||||
require.resolve(pkg);
|
|
||||||
packages.push(pkg);
|
|
||||||
} catch (e) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!packages.length)
|
|
||||||
packages.push("playwright");
|
|
||||||
const packageManager = (0, import_utils.getPackageManager)();
|
|
||||||
if (packageManager === "yarn") {
|
|
||||||
console.error(`Please install @playwright/test package before running "yarn playwright ${command}"`);
|
|
||||||
console.error(` yarn remove ${packages.join(" ")}`);
|
|
||||||
console.error(" yarn add -D @playwright/test");
|
|
||||||
} else if (packageManager === "pnpm") {
|
|
||||||
console.error(`Please install @playwright/test package before running "pnpm exec playwright ${command}"`);
|
|
||||||
console.error(` pnpm remove ${packages.join(" ")}`);
|
|
||||||
console.error(" pnpm add -D @playwright/test");
|
|
||||||
} else {
|
|
||||||
console.error(`Please install @playwright/test package before running "npx playwright ${command}"`);
|
|
||||||
console.error(` npm uninstall ${packages.join(" ")}`);
|
|
||||||
console.error(" npm install -D @playwright/test");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const kExternalPlaywrightTestCommands = [
|
|
||||||
["test", "Run tests with Playwright Test."],
|
|
||||||
["show-report", "Show Playwright Test HTML report."],
|
|
||||||
["merge-reports", "Merge Playwright Test Blob reports"]
|
|
||||||
];
|
|
||||||
function addExternalPlaywrightTestCommands() {
|
|
||||||
for (const [command, description] of kExternalPlaywrightTestCommands) {
|
|
||||||
const playwrightTest = import_program.program.command(command).allowUnknownOption(true);
|
|
||||||
playwrightTest.description(`${description} Available in @playwright/test package.`);
|
|
||||||
playwrightTest.action(async () => {
|
|
||||||
printPlaywrightTestError(command);
|
|
||||||
(0, import_processLauncher.gracefullyProcessExitDoNotHang)(1);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!process.env.PW_LANG_NAME)
|
|
||||||
addExternalPlaywrightTestCommands();
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
program
|
|
||||||
});
|
|
||||||
49
tvapp2/node_modules/playwright-core/lib/client/accessibility.js
generated
vendored
49
tvapp2/node_modules/playwright-core/lib/client/accessibility.js
generated
vendored
@@ -1,49 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var accessibility_exports = {};
|
|
||||||
__export(accessibility_exports, {
|
|
||||||
Accessibility: () => Accessibility
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(accessibility_exports);
|
|
||||||
function axNodeFromProtocol(axNode) {
|
|
||||||
const result = {
|
|
||||||
...axNode,
|
|
||||||
value: axNode.valueNumber !== void 0 ? axNode.valueNumber : axNode.valueString,
|
|
||||||
checked: axNode.checked === "checked" ? true : axNode.checked === "unchecked" ? false : axNode.checked,
|
|
||||||
pressed: axNode.pressed === "pressed" ? true : axNode.pressed === "released" ? false : axNode.pressed,
|
|
||||||
children: axNode.children ? axNode.children.map(axNodeFromProtocol) : void 0
|
|
||||||
};
|
|
||||||
delete result.valueNumber;
|
|
||||||
delete result.valueString;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
class Accessibility {
|
|
||||||
constructor(channel) {
|
|
||||||
this._channel = channel;
|
|
||||||
}
|
|
||||||
async snapshot(options = {}) {
|
|
||||||
const root = options.root ? options.root._elementChannel : void 0;
|
|
||||||
const result = await this._channel.accessibilitySnapshot({ interestingOnly: options.interestingOnly, root });
|
|
||||||
return result.rootAXNode ? axNodeFromProtocol(result.rootAXNode) : null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
Accessibility
|
|
||||||
});
|
|
||||||
365
tvapp2/node_modules/playwright-core/lib/client/android.js
generated
vendored
365
tvapp2/node_modules/playwright-core/lib/client/android.js
generated
vendored
@@ -1,365 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var android_exports = {};
|
|
||||||
__export(android_exports, {
|
|
||||||
Android: () => Android,
|
|
||||||
AndroidDevice: () => AndroidDevice,
|
|
||||||
AndroidInput: () => AndroidInput,
|
|
||||||
AndroidSocket: () => AndroidSocket,
|
|
||||||
AndroidWebView: () => AndroidWebView
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(android_exports);
|
|
||||||
var import_eventEmitter = require("./eventEmitter");
|
|
||||||
var import_browserContext = require("./browserContext");
|
|
||||||
var import_channelOwner = require("./channelOwner");
|
|
||||||
var import_errors = require("./errors");
|
|
||||||
var import_events = require("./events");
|
|
||||||
var import_waiter = require("./waiter");
|
|
||||||
var import_timeoutSettings = require("./timeoutSettings");
|
|
||||||
var import_rtti = require("../utils/isomorphic/rtti");
|
|
||||||
var import_time = require("../utils/isomorphic/time");
|
|
||||||
var import_timeoutRunner = require("../utils/isomorphic/timeoutRunner");
|
|
||||||
var import_webSocket = require("./webSocket");
|
|
||||||
class Android extends import_channelOwner.ChannelOwner {
|
|
||||||
static from(android) {
|
|
||||||
return android._object;
|
|
||||||
}
|
|
||||||
constructor(parent, type, guid, initializer) {
|
|
||||||
super(parent, type, guid, initializer);
|
|
||||||
this._timeoutSettings = new import_timeoutSettings.TimeoutSettings(this._platform);
|
|
||||||
}
|
|
||||||
setDefaultTimeout(timeout) {
|
|
||||||
this._timeoutSettings.setDefaultTimeout(timeout);
|
|
||||||
this._wrapApiCall(async () => {
|
|
||||||
await this._channel.setDefaultTimeoutNoReply({ timeout });
|
|
||||||
}, true).catch(() => {
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async devices(options = {}) {
|
|
||||||
const { devices } = await this._channel.devices(options);
|
|
||||||
return devices.map((d) => AndroidDevice.from(d));
|
|
||||||
}
|
|
||||||
async launchServer(options = {}) {
|
|
||||||
if (!this._serverLauncher)
|
|
||||||
throw new Error("Launching server is not supported");
|
|
||||||
return await this._serverLauncher.launchServer(options);
|
|
||||||
}
|
|
||||||
async connect(wsEndpoint, options = {}) {
|
|
||||||
return await this._wrapApiCall(async () => {
|
|
||||||
const deadline = options.timeout ? (0, import_time.monotonicTime)() + options.timeout : 0;
|
|
||||||
const headers = { "x-playwright-browser": "android", ...options.headers };
|
|
||||||
const connectParams = { wsEndpoint, headers, slowMo: options.slowMo, timeout: options.timeout };
|
|
||||||
const connection = await (0, import_webSocket.connectOverWebSocket)(this._connection, connectParams);
|
|
||||||
let device;
|
|
||||||
connection.on("close", () => {
|
|
||||||
device?._didClose();
|
|
||||||
});
|
|
||||||
const result = await (0, import_timeoutRunner.raceAgainstDeadline)(async () => {
|
|
||||||
const playwright = await connection.initializePlaywright();
|
|
||||||
if (!playwright._initializer.preConnectedAndroidDevice) {
|
|
||||||
connection.close();
|
|
||||||
throw new Error("Malformed endpoint. Did you use Android.launchServer method?");
|
|
||||||
}
|
|
||||||
device = AndroidDevice.from(playwright._initializer.preConnectedAndroidDevice);
|
|
||||||
device._shouldCloseConnectionOnClose = true;
|
|
||||||
device.on(import_events.Events.AndroidDevice.Close, () => connection.close());
|
|
||||||
return device;
|
|
||||||
}, deadline);
|
|
||||||
if (!result.timedOut) {
|
|
||||||
return result.result;
|
|
||||||
} else {
|
|
||||||
connection.close();
|
|
||||||
throw new Error(`Timeout ${options.timeout}ms exceeded`);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
class AndroidDevice extends import_channelOwner.ChannelOwner {
|
|
||||||
constructor(parent, type, guid, initializer) {
|
|
||||||
super(parent, type, guid, initializer);
|
|
||||||
this._webViews = /* @__PURE__ */ new Map();
|
|
||||||
this._shouldCloseConnectionOnClose = false;
|
|
||||||
this.input = new AndroidInput(this);
|
|
||||||
this._timeoutSettings = new import_timeoutSettings.TimeoutSettings(this._platform, parent._timeoutSettings);
|
|
||||||
this._channel.on("webViewAdded", ({ webView }) => this._onWebViewAdded(webView));
|
|
||||||
this._channel.on("webViewRemoved", ({ socketName }) => this._onWebViewRemoved(socketName));
|
|
||||||
this._channel.on("close", () => this._didClose());
|
|
||||||
}
|
|
||||||
static from(androidDevice) {
|
|
||||||
return androidDevice._object;
|
|
||||||
}
|
|
||||||
_onWebViewAdded(webView) {
|
|
||||||
const view = new AndroidWebView(this, webView);
|
|
||||||
this._webViews.set(webView.socketName, view);
|
|
||||||
this.emit(import_events.Events.AndroidDevice.WebView, view);
|
|
||||||
}
|
|
||||||
_onWebViewRemoved(socketName) {
|
|
||||||
const view = this._webViews.get(socketName);
|
|
||||||
this._webViews.delete(socketName);
|
|
||||||
if (view)
|
|
||||||
view.emit(import_events.Events.AndroidWebView.Close);
|
|
||||||
}
|
|
||||||
setDefaultTimeout(timeout) {
|
|
||||||
this._timeoutSettings.setDefaultTimeout(timeout);
|
|
||||||
this._wrapApiCall(async () => {
|
|
||||||
await this._channel.setDefaultTimeoutNoReply({ timeout });
|
|
||||||
}, true).catch(() => {
|
|
||||||
});
|
|
||||||
}
|
|
||||||
serial() {
|
|
||||||
return this._initializer.serial;
|
|
||||||
}
|
|
||||||
model() {
|
|
||||||
return this._initializer.model;
|
|
||||||
}
|
|
||||||
webViews() {
|
|
||||||
return [...this._webViews.values()];
|
|
||||||
}
|
|
||||||
async webView(selector, options) {
|
|
||||||
const predicate = (v) => {
|
|
||||||
if (selector.pkg)
|
|
||||||
return v.pkg() === selector.pkg;
|
|
||||||
if (selector.socketName)
|
|
||||||
return v._socketName() === selector.socketName;
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
const webView = [...this._webViews.values()].find(predicate);
|
|
||||||
if (webView)
|
|
||||||
return webView;
|
|
||||||
return await this.waitForEvent("webview", { ...options, predicate });
|
|
||||||
}
|
|
||||||
async wait(selector, options) {
|
|
||||||
await this._channel.wait({ selector: toSelectorChannel(selector), ...options });
|
|
||||||
}
|
|
||||||
async fill(selector, text, options) {
|
|
||||||
await this._channel.fill({ selector: toSelectorChannel(selector), text, ...options });
|
|
||||||
}
|
|
||||||
async press(selector, key, options) {
|
|
||||||
await this.tap(selector, options);
|
|
||||||
await this.input.press(key);
|
|
||||||
}
|
|
||||||
async tap(selector, options) {
|
|
||||||
await this._channel.tap({ selector: toSelectorChannel(selector), ...options });
|
|
||||||
}
|
|
||||||
async drag(selector, dest, options) {
|
|
||||||
await this._channel.drag({ selector: toSelectorChannel(selector), dest, ...options });
|
|
||||||
}
|
|
||||||
async fling(selector, direction, options) {
|
|
||||||
await this._channel.fling({ selector: toSelectorChannel(selector), direction, ...options });
|
|
||||||
}
|
|
||||||
async longTap(selector, options) {
|
|
||||||
await this._channel.longTap({ selector: toSelectorChannel(selector), ...options });
|
|
||||||
}
|
|
||||||
async pinchClose(selector, percent, options) {
|
|
||||||
await this._channel.pinchClose({ selector: toSelectorChannel(selector), percent, ...options });
|
|
||||||
}
|
|
||||||
async pinchOpen(selector, percent, options) {
|
|
||||||
await this._channel.pinchOpen({ selector: toSelectorChannel(selector), percent, ...options });
|
|
||||||
}
|
|
||||||
async scroll(selector, direction, percent, options) {
|
|
||||||
await this._channel.scroll({ selector: toSelectorChannel(selector), direction, percent, ...options });
|
|
||||||
}
|
|
||||||
async swipe(selector, direction, percent, options) {
|
|
||||||
await this._channel.swipe({ selector: toSelectorChannel(selector), direction, percent, ...options });
|
|
||||||
}
|
|
||||||
async info(selector) {
|
|
||||||
return (await this._channel.info({ selector: toSelectorChannel(selector) })).info;
|
|
||||||
}
|
|
||||||
async screenshot(options = {}) {
|
|
||||||
const { binary } = await this._channel.screenshot();
|
|
||||||
if (options.path)
|
|
||||||
await this._platform.fs().promises.writeFile(options.path, binary);
|
|
||||||
return binary;
|
|
||||||
}
|
|
||||||
async [Symbol.asyncDispose]() {
|
|
||||||
await this.close();
|
|
||||||
}
|
|
||||||
async close() {
|
|
||||||
try {
|
|
||||||
if (this._shouldCloseConnectionOnClose)
|
|
||||||
this._connection.close();
|
|
||||||
else
|
|
||||||
await this._channel.close();
|
|
||||||
} catch (e) {
|
|
||||||
if ((0, import_errors.isTargetClosedError)(e))
|
|
||||||
return;
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_didClose() {
|
|
||||||
this.emit(import_events.Events.AndroidDevice.Close, this);
|
|
||||||
}
|
|
||||||
async shell(command) {
|
|
||||||
const { result } = await this._channel.shell({ command });
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
async open(command) {
|
|
||||||
return AndroidSocket.from((await this._channel.open({ command })).socket);
|
|
||||||
}
|
|
||||||
async installApk(file, options) {
|
|
||||||
await this._channel.installApk({ file: await loadFile(this._platform, file), args: options && options.args });
|
|
||||||
}
|
|
||||||
async push(file, path, options) {
|
|
||||||
await this._channel.push({ file: await loadFile(this._platform, file), path, mode: options ? options.mode : void 0 });
|
|
||||||
}
|
|
||||||
async launchBrowser(options = {}) {
|
|
||||||
const contextOptions = await (0, import_browserContext.prepareBrowserContextParams)(this._platform, options);
|
|
||||||
const result = await this._channel.launchBrowser(contextOptions);
|
|
||||||
const context = import_browserContext.BrowserContext.from(result.context);
|
|
||||||
context._setOptions(contextOptions, {});
|
|
||||||
return context;
|
|
||||||
}
|
|
||||||
async waitForEvent(event, optionsOrPredicate = {}) {
|
|
||||||
return await this._wrapApiCall(async () => {
|
|
||||||
const timeout = this._timeoutSettings.timeout(typeof optionsOrPredicate === "function" ? {} : optionsOrPredicate);
|
|
||||||
const predicate = typeof optionsOrPredicate === "function" ? optionsOrPredicate : optionsOrPredicate.predicate;
|
|
||||||
const waiter = import_waiter.Waiter.createForEvent(this, event);
|
|
||||||
waiter.rejectOnTimeout(timeout, `Timeout ${timeout}ms exceeded while waiting for event "${event}"`);
|
|
||||||
if (event !== import_events.Events.AndroidDevice.Close)
|
|
||||||
waiter.rejectOnEvent(this, import_events.Events.AndroidDevice.Close, () => new import_errors.TargetClosedError());
|
|
||||||
const result = await waiter.waitForEvent(this, event, predicate);
|
|
||||||
waiter.dispose();
|
|
||||||
return result;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
class AndroidSocket extends import_channelOwner.ChannelOwner {
|
|
||||||
static from(androidDevice) {
|
|
||||||
return androidDevice._object;
|
|
||||||
}
|
|
||||||
constructor(parent, type, guid, initializer) {
|
|
||||||
super(parent, type, guid, initializer);
|
|
||||||
this._channel.on("data", ({ data }) => this.emit(import_events.Events.AndroidSocket.Data, data));
|
|
||||||
this._channel.on("close", () => this.emit(import_events.Events.AndroidSocket.Close));
|
|
||||||
}
|
|
||||||
async write(data) {
|
|
||||||
await this._channel.write({ data });
|
|
||||||
}
|
|
||||||
async close() {
|
|
||||||
await this._channel.close();
|
|
||||||
}
|
|
||||||
async [Symbol.asyncDispose]() {
|
|
||||||
await this.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
async function loadFile(platform, file) {
|
|
||||||
if ((0, import_rtti.isString)(file))
|
|
||||||
return await platform.fs().promises.readFile(file);
|
|
||||||
return file;
|
|
||||||
}
|
|
||||||
class AndroidInput {
|
|
||||||
constructor(device) {
|
|
||||||
this._device = device;
|
|
||||||
}
|
|
||||||
async type(text) {
|
|
||||||
await this._device._channel.inputType({ text });
|
|
||||||
}
|
|
||||||
async press(key) {
|
|
||||||
await this._device._channel.inputPress({ key });
|
|
||||||
}
|
|
||||||
async tap(point) {
|
|
||||||
await this._device._channel.inputTap({ point });
|
|
||||||
}
|
|
||||||
async swipe(from, segments, steps) {
|
|
||||||
await this._device._channel.inputSwipe({ segments, steps });
|
|
||||||
}
|
|
||||||
async drag(from, to, steps) {
|
|
||||||
await this._device._channel.inputDrag({ from, to, steps });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function toSelectorChannel(selector) {
|
|
||||||
const {
|
|
||||||
checkable,
|
|
||||||
checked,
|
|
||||||
clazz,
|
|
||||||
clickable,
|
|
||||||
depth,
|
|
||||||
desc,
|
|
||||||
enabled,
|
|
||||||
focusable,
|
|
||||||
focused,
|
|
||||||
hasChild,
|
|
||||||
hasDescendant,
|
|
||||||
longClickable,
|
|
||||||
pkg,
|
|
||||||
res,
|
|
||||||
scrollable,
|
|
||||||
selected,
|
|
||||||
text
|
|
||||||
} = selector;
|
|
||||||
const toRegex = (value) => {
|
|
||||||
if (value === void 0)
|
|
||||||
return void 0;
|
|
||||||
if ((0, import_rtti.isRegExp)(value))
|
|
||||||
return value.source;
|
|
||||||
return "^" + value.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d") + "$";
|
|
||||||
};
|
|
||||||
return {
|
|
||||||
checkable,
|
|
||||||
checked,
|
|
||||||
clazz: toRegex(clazz),
|
|
||||||
pkg: toRegex(pkg),
|
|
||||||
desc: toRegex(desc),
|
|
||||||
res: toRegex(res),
|
|
||||||
text: toRegex(text),
|
|
||||||
clickable,
|
|
||||||
depth,
|
|
||||||
enabled,
|
|
||||||
focusable,
|
|
||||||
focused,
|
|
||||||
hasChild: hasChild ? { selector: toSelectorChannel(hasChild.selector) } : void 0,
|
|
||||||
hasDescendant: hasDescendant ? { selector: toSelectorChannel(hasDescendant.selector), maxDepth: hasDescendant.maxDepth } : void 0,
|
|
||||||
longClickable,
|
|
||||||
scrollable,
|
|
||||||
selected
|
|
||||||
};
|
|
||||||
}
|
|
||||||
class AndroidWebView extends import_eventEmitter.EventEmitter {
|
|
||||||
constructor(device, data) {
|
|
||||||
super(device._platform);
|
|
||||||
this._device = device;
|
|
||||||
this._data = data;
|
|
||||||
}
|
|
||||||
pid() {
|
|
||||||
return this._data.pid;
|
|
||||||
}
|
|
||||||
pkg() {
|
|
||||||
return this._data.pkg;
|
|
||||||
}
|
|
||||||
_socketName() {
|
|
||||||
return this._data.socketName;
|
|
||||||
}
|
|
||||||
async page() {
|
|
||||||
if (!this._pagePromise)
|
|
||||||
this._pagePromise = this._fetchPage();
|
|
||||||
return await this._pagePromise;
|
|
||||||
}
|
|
||||||
async _fetchPage() {
|
|
||||||
const { context } = await this._device._channel.connectToWebView({ socketName: this._data.socketName });
|
|
||||||
return import_browserContext.BrowserContext.from(context).pages()[0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
Android,
|
|
||||||
AndroidDevice,
|
|
||||||
AndroidInput,
|
|
||||||
AndroidSocket,
|
|
||||||
AndroidWebView
|
|
||||||
});
|
|
||||||
137
tvapp2/node_modules/playwright-core/lib/client/api.js
generated
vendored
137
tvapp2/node_modules/playwright-core/lib/client/api.js
generated
vendored
@@ -1,137 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var api_exports = {};
|
|
||||||
__export(api_exports, {
|
|
||||||
APIRequest: () => import_fetch.APIRequest,
|
|
||||||
APIRequestContext: () => import_fetch.APIRequestContext,
|
|
||||||
APIResponse: () => import_fetch.APIResponse,
|
|
||||||
Accessibility: () => import_accessibility.Accessibility,
|
|
||||||
Android: () => import_android.Android,
|
|
||||||
AndroidDevice: () => import_android.AndroidDevice,
|
|
||||||
AndroidInput: () => import_android.AndroidInput,
|
|
||||||
AndroidSocket: () => import_android.AndroidSocket,
|
|
||||||
AndroidWebView: () => import_android.AndroidWebView,
|
|
||||||
Browser: () => import_browser.Browser,
|
|
||||||
BrowserContext: () => import_browserContext.BrowserContext,
|
|
||||||
BrowserType: () => import_browserType.BrowserType,
|
|
||||||
CDPSession: () => import_cdpSession.CDPSession,
|
|
||||||
Clock: () => import_clock.Clock,
|
|
||||||
ConsoleMessage: () => import_consoleMessage.ConsoleMessage,
|
|
||||||
Coverage: () => import_coverage.Coverage,
|
|
||||||
Dialog: () => import_dialog.Dialog,
|
|
||||||
Download: () => import_download.Download,
|
|
||||||
Electron: () => import_electron.Electron,
|
|
||||||
ElectronApplication: () => import_electron.ElectronApplication,
|
|
||||||
ElementHandle: () => import_elementHandle.ElementHandle,
|
|
||||||
FileChooser: () => import_fileChooser.FileChooser,
|
|
||||||
Frame: () => import_frame.Frame,
|
|
||||||
FrameLocator: () => import_locator.FrameLocator,
|
|
||||||
JSHandle: () => import_jsHandle.JSHandle,
|
|
||||||
Keyboard: () => import_input.Keyboard,
|
|
||||||
Locator: () => import_locator.Locator,
|
|
||||||
Mouse: () => import_input.Mouse,
|
|
||||||
Page: () => import_page.Page,
|
|
||||||
Playwright: () => import_playwright.Playwright,
|
|
||||||
Request: () => import_network.Request,
|
|
||||||
Response: () => import_network.Response,
|
|
||||||
Route: () => import_network.Route,
|
|
||||||
Selectors: () => import_selectors.Selectors,
|
|
||||||
TimeoutError: () => import_errors.TimeoutError,
|
|
||||||
Touchscreen: () => import_input.Touchscreen,
|
|
||||||
Tracing: () => import_tracing.Tracing,
|
|
||||||
Video: () => import_video.Video,
|
|
||||||
WebError: () => import_webError.WebError,
|
|
||||||
WebSocket: () => import_network.WebSocket,
|
|
||||||
WebSocketRoute: () => import_network.WebSocketRoute,
|
|
||||||
Worker: () => import_worker.Worker
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(api_exports);
|
|
||||||
var import_accessibility = require("./accessibility");
|
|
||||||
var import_android = require("./android");
|
|
||||||
var import_browser = require("./browser");
|
|
||||||
var import_browserContext = require("./browserContext");
|
|
||||||
var import_browserType = require("./browserType");
|
|
||||||
var import_clock = require("./clock");
|
|
||||||
var import_consoleMessage = require("./consoleMessage");
|
|
||||||
var import_coverage = require("./coverage");
|
|
||||||
var import_dialog = require("./dialog");
|
|
||||||
var import_download = require("./download");
|
|
||||||
var import_electron = require("./electron");
|
|
||||||
var import_locator = require("./locator");
|
|
||||||
var import_elementHandle = require("./elementHandle");
|
|
||||||
var import_fileChooser = require("./fileChooser");
|
|
||||||
var import_errors = require("./errors");
|
|
||||||
var import_frame = require("./frame");
|
|
||||||
var import_input = require("./input");
|
|
||||||
var import_jsHandle = require("./jsHandle");
|
|
||||||
var import_network = require("./network");
|
|
||||||
var import_fetch = require("./fetch");
|
|
||||||
var import_page = require("./page");
|
|
||||||
var import_selectors = require("./selectors");
|
|
||||||
var import_tracing = require("./tracing");
|
|
||||||
var import_video = require("./video");
|
|
||||||
var import_worker = require("./worker");
|
|
||||||
var import_cdpSession = require("./cdpSession");
|
|
||||||
var import_playwright = require("./playwright");
|
|
||||||
var import_webError = require("./webError");
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
APIRequest,
|
|
||||||
APIRequestContext,
|
|
||||||
APIResponse,
|
|
||||||
Accessibility,
|
|
||||||
Android,
|
|
||||||
AndroidDevice,
|
|
||||||
AndroidInput,
|
|
||||||
AndroidSocket,
|
|
||||||
AndroidWebView,
|
|
||||||
Browser,
|
|
||||||
BrowserContext,
|
|
||||||
BrowserType,
|
|
||||||
CDPSession,
|
|
||||||
Clock,
|
|
||||||
ConsoleMessage,
|
|
||||||
Coverage,
|
|
||||||
Dialog,
|
|
||||||
Download,
|
|
||||||
Electron,
|
|
||||||
ElectronApplication,
|
|
||||||
ElementHandle,
|
|
||||||
FileChooser,
|
|
||||||
Frame,
|
|
||||||
FrameLocator,
|
|
||||||
JSHandle,
|
|
||||||
Keyboard,
|
|
||||||
Locator,
|
|
||||||
Mouse,
|
|
||||||
Page,
|
|
||||||
Playwright,
|
|
||||||
Request,
|
|
||||||
Response,
|
|
||||||
Route,
|
|
||||||
Selectors,
|
|
||||||
TimeoutError,
|
|
||||||
Touchscreen,
|
|
||||||
Tracing,
|
|
||||||
Video,
|
|
||||||
WebError,
|
|
||||||
WebSocket,
|
|
||||||
WebSocketRoute,
|
|
||||||
Worker
|
|
||||||
});
|
|
||||||
79
tvapp2/node_modules/playwright-core/lib/client/artifact.js
generated
vendored
79
tvapp2/node_modules/playwright-core/lib/client/artifact.js
generated
vendored
@@ -1,79 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var artifact_exports = {};
|
|
||||||
__export(artifact_exports, {
|
|
||||||
Artifact: () => Artifact
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(artifact_exports);
|
|
||||||
var import_channelOwner = require("./channelOwner");
|
|
||||||
var import_stream = require("./stream");
|
|
||||||
var import_fileUtils = require("./fileUtils");
|
|
||||||
class Artifact extends import_channelOwner.ChannelOwner {
|
|
||||||
static from(channel) {
|
|
||||||
return channel._object;
|
|
||||||
}
|
|
||||||
async pathAfterFinished() {
|
|
||||||
if (this._connection.isRemote())
|
|
||||||
throw new Error(`Path is not available when connecting remotely. Use saveAs() to save a local copy.`);
|
|
||||||
return (await this._channel.pathAfterFinished()).value;
|
|
||||||
}
|
|
||||||
async saveAs(path) {
|
|
||||||
if (!this._connection.isRemote()) {
|
|
||||||
await this._channel.saveAs({ path });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const result = await this._channel.saveAsStream();
|
|
||||||
const stream = import_stream.Stream.from(result.stream);
|
|
||||||
await (0, import_fileUtils.mkdirIfNeeded)(this._platform, path);
|
|
||||||
await new Promise((resolve, reject) => {
|
|
||||||
stream.stream().pipe(this._platform.fs().createWriteStream(path)).on("finish", resolve).on("error", reject);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async failure() {
|
|
||||||
return (await this._channel.failure()).error || null;
|
|
||||||
}
|
|
||||||
async createReadStream() {
|
|
||||||
const result = await this._channel.stream();
|
|
||||||
const stream = import_stream.Stream.from(result.stream);
|
|
||||||
return stream.stream();
|
|
||||||
}
|
|
||||||
async readIntoBuffer() {
|
|
||||||
const stream = await this.createReadStream();
|
|
||||||
return await new Promise((resolve, reject) => {
|
|
||||||
const chunks = [];
|
|
||||||
stream.on("data", (chunk) => {
|
|
||||||
chunks.push(chunk);
|
|
||||||
});
|
|
||||||
stream.on("end", () => {
|
|
||||||
resolve(Buffer.concat(chunks));
|
|
||||||
});
|
|
||||||
stream.on("error", reject);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async cancel() {
|
|
||||||
return await this._channel.cancel();
|
|
||||||
}
|
|
||||||
async delete() {
|
|
||||||
return await this._channel.delete();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
Artifact
|
|
||||||
});
|
|
||||||
136
tvapp2/node_modules/playwright-core/lib/client/browser.js
generated
vendored
136
tvapp2/node_modules/playwright-core/lib/client/browser.js
generated
vendored
@@ -1,136 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var browser_exports = {};
|
|
||||||
__export(browser_exports, {
|
|
||||||
Browser: () => Browser
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(browser_exports);
|
|
||||||
var import_artifact = require("./artifact");
|
|
||||||
var import_browserContext = require("./browserContext");
|
|
||||||
var import_cdpSession = require("./cdpSession");
|
|
||||||
var import_channelOwner = require("./channelOwner");
|
|
||||||
var import_errors = require("./errors");
|
|
||||||
var import_events = require("./events");
|
|
||||||
var import_fileUtils = require("./fileUtils");
|
|
||||||
class Browser extends import_channelOwner.ChannelOwner {
|
|
||||||
constructor(parent, type, guid, initializer) {
|
|
||||||
super(parent, type, guid, initializer);
|
|
||||||
this._contexts = /* @__PURE__ */ new Set();
|
|
||||||
this._isConnected = true;
|
|
||||||
this._shouldCloseConnectionOnClose = false;
|
|
||||||
this._options = {};
|
|
||||||
this._name = initializer.name;
|
|
||||||
this._channel.on("close", () => this._didClose());
|
|
||||||
this._closedPromise = new Promise((f) => this.once(import_events.Events.Browser.Disconnected, f));
|
|
||||||
}
|
|
||||||
static from(browser) {
|
|
||||||
return browser._object;
|
|
||||||
}
|
|
||||||
browserType() {
|
|
||||||
return this._browserType;
|
|
||||||
}
|
|
||||||
async newContext(options = {}) {
|
|
||||||
return await this._innerNewContext(options, false);
|
|
||||||
}
|
|
||||||
async _newContextForReuse(options = {}) {
|
|
||||||
return await this._wrapApiCall(async () => {
|
|
||||||
for (const context of this._contexts) {
|
|
||||||
await this._browserType._willCloseContext(context);
|
|
||||||
for (const page of context.pages())
|
|
||||||
page._onClose();
|
|
||||||
context._onClose();
|
|
||||||
}
|
|
||||||
return await this._innerNewContext(options, true);
|
|
||||||
}, true);
|
|
||||||
}
|
|
||||||
async _stopPendingOperations(reason) {
|
|
||||||
return await this._wrapApiCall(async () => {
|
|
||||||
await this._channel.stopPendingOperations({ reason });
|
|
||||||
}, true);
|
|
||||||
}
|
|
||||||
async _innerNewContext(options = {}, forReuse) {
|
|
||||||
options = { ...this._browserType._playwright._defaultContextOptions, ...options };
|
|
||||||
const contextOptions = await (0, import_browserContext.prepareBrowserContextParams)(this._platform, options);
|
|
||||||
const response = forReuse ? await this._channel.newContextForReuse(contextOptions) : await this._channel.newContext(contextOptions);
|
|
||||||
const context = import_browserContext.BrowserContext.from(response.context);
|
|
||||||
await this._browserType._didCreateContext(context, contextOptions, this._options, options.logger || this._logger);
|
|
||||||
return context;
|
|
||||||
}
|
|
||||||
contexts() {
|
|
||||||
return [...this._contexts];
|
|
||||||
}
|
|
||||||
version() {
|
|
||||||
return this._initializer.version;
|
|
||||||
}
|
|
||||||
async newPage(options = {}) {
|
|
||||||
return await this._wrapApiCall(async () => {
|
|
||||||
const context = await this.newContext(options);
|
|
||||||
const page = await context.newPage();
|
|
||||||
page._ownedContext = context;
|
|
||||||
context._ownerPage = page;
|
|
||||||
return page;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
isConnected() {
|
|
||||||
return this._isConnected;
|
|
||||||
}
|
|
||||||
async newBrowserCDPSession() {
|
|
||||||
return import_cdpSession.CDPSession.from((await this._channel.newBrowserCDPSession()).session);
|
|
||||||
}
|
|
||||||
async startTracing(page, options = {}) {
|
|
||||||
this._path = options.path;
|
|
||||||
await this._channel.startTracing({ ...options, page: page ? page._channel : void 0 });
|
|
||||||
}
|
|
||||||
async stopTracing() {
|
|
||||||
const artifact = import_artifact.Artifact.from((await this._channel.stopTracing()).artifact);
|
|
||||||
const buffer = await artifact.readIntoBuffer();
|
|
||||||
await artifact.delete();
|
|
||||||
if (this._path) {
|
|
||||||
await (0, import_fileUtils.mkdirIfNeeded)(this._platform, this._path);
|
|
||||||
await this._platform.fs().promises.writeFile(this._path, buffer);
|
|
||||||
this._path = void 0;
|
|
||||||
}
|
|
||||||
return buffer;
|
|
||||||
}
|
|
||||||
async [Symbol.asyncDispose]() {
|
|
||||||
await this.close();
|
|
||||||
}
|
|
||||||
async close(options = {}) {
|
|
||||||
this._closeReason = options.reason;
|
|
||||||
try {
|
|
||||||
if (this._shouldCloseConnectionOnClose)
|
|
||||||
this._connection.close();
|
|
||||||
else
|
|
||||||
await this._channel.close(options);
|
|
||||||
await this._closedPromise;
|
|
||||||
} catch (e) {
|
|
||||||
if ((0, import_errors.isTargetClosedError)(e))
|
|
||||||
return;
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_didClose() {
|
|
||||||
this._isConnected = false;
|
|
||||||
this.emit(import_events.Events.Browser.Disconnected, this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
Browser
|
|
||||||
});
|
|
||||||
539
tvapp2/node_modules/playwright-core/lib/client/browserContext.js
generated
vendored
539
tvapp2/node_modules/playwright-core/lib/client/browserContext.js
generated
vendored
@@ -1,539 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __create = Object.create;
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __getProtoOf = Object.getPrototypeOf;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
||||||
// If the importer is in node compatibility mode or this is not an ESM
|
|
||||||
// file that has been converted to a CommonJS file using a Babel-
|
|
||||||
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
||||||
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
||||||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
||||||
mod
|
|
||||||
));
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var browserContext_exports = {};
|
|
||||||
__export(browserContext_exports, {
|
|
||||||
BrowserContext: () => BrowserContext,
|
|
||||||
prepareBrowserContextParams: () => prepareBrowserContextParams,
|
|
||||||
toClientCertificatesProtocol: () => toClientCertificatesProtocol
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(browserContext_exports);
|
|
||||||
var import_artifact = require("./artifact");
|
|
||||||
var import_browser = require("./browser");
|
|
||||||
var import_cdpSession = require("./cdpSession");
|
|
||||||
var import_channelOwner = require("./channelOwner");
|
|
||||||
var import_clientHelper = require("./clientHelper");
|
|
||||||
var import_clock = require("./clock");
|
|
||||||
var import_consoleMessage = require("./consoleMessage");
|
|
||||||
var import_dialog = require("./dialog");
|
|
||||||
var import_errors = require("./errors");
|
|
||||||
var import_events = require("./events");
|
|
||||||
var import_fetch = require("./fetch");
|
|
||||||
var import_frame = require("./frame");
|
|
||||||
var import_harRouter = require("./harRouter");
|
|
||||||
var network = __toESM(require("./network"));
|
|
||||||
var import_page = require("./page");
|
|
||||||
var import_tracing = require("./tracing");
|
|
||||||
var import_waiter = require("./waiter");
|
|
||||||
var import_webError = require("./webError");
|
|
||||||
var import_worker = require("./worker");
|
|
||||||
var import_timeoutSettings = require("./timeoutSettings");
|
|
||||||
var import_fileUtils = require("./fileUtils");
|
|
||||||
var import_headers = require("../utils/isomorphic/headers");
|
|
||||||
var import_urlMatch = require("../utils/isomorphic/urlMatch");
|
|
||||||
var import_rtti = require("../utils/isomorphic/rtti");
|
|
||||||
var import_stackTrace = require("../utils/isomorphic/stackTrace");
|
|
||||||
class BrowserContext extends import_channelOwner.ChannelOwner {
|
|
||||||
constructor(parent, type, guid, initializer) {
|
|
||||||
super(parent, type, guid, initializer);
|
|
||||||
this._pages = /* @__PURE__ */ new Set();
|
|
||||||
this._routes = [];
|
|
||||||
this._webSocketRoutes = [];
|
|
||||||
this._browser = null;
|
|
||||||
this._bindings = /* @__PURE__ */ new Map();
|
|
||||||
this._options = {};
|
|
||||||
this._backgroundPages = /* @__PURE__ */ new Set();
|
|
||||||
this._serviceWorkers = /* @__PURE__ */ new Set();
|
|
||||||
this._harRecorders = /* @__PURE__ */ new Map();
|
|
||||||
this._closeWasCalled = false;
|
|
||||||
this._harRouters = [];
|
|
||||||
this._timeoutSettings = new import_timeoutSettings.TimeoutSettings(this._platform);
|
|
||||||
if (parent instanceof import_browser.Browser)
|
|
||||||
this._browser = parent;
|
|
||||||
this._browser?._contexts.add(this);
|
|
||||||
this._isChromium = this._browser?._name === "chromium";
|
|
||||||
this.tracing = import_tracing.Tracing.from(initializer.tracing);
|
|
||||||
this.request = import_fetch.APIRequestContext.from(initializer.requestContext);
|
|
||||||
this.clock = new import_clock.Clock(this);
|
|
||||||
this._channel.on("bindingCall", ({ binding }) => this._onBinding(import_page.BindingCall.from(binding)));
|
|
||||||
this._channel.on("close", () => this._onClose());
|
|
||||||
this._channel.on("page", ({ page }) => this._onPage(import_page.Page.from(page)));
|
|
||||||
this._channel.on("route", ({ route }) => this._onRoute(network.Route.from(route)));
|
|
||||||
this._channel.on("webSocketRoute", ({ webSocketRoute }) => this._onWebSocketRoute(network.WebSocketRoute.from(webSocketRoute)));
|
|
||||||
this._channel.on("backgroundPage", ({ page }) => {
|
|
||||||
const backgroundPage = import_page.Page.from(page);
|
|
||||||
this._backgroundPages.add(backgroundPage);
|
|
||||||
this.emit(import_events.Events.BrowserContext.BackgroundPage, backgroundPage);
|
|
||||||
});
|
|
||||||
this._channel.on("serviceWorker", ({ worker }) => {
|
|
||||||
const serviceWorker = import_worker.Worker.from(worker);
|
|
||||||
serviceWorker._context = this;
|
|
||||||
this._serviceWorkers.add(serviceWorker);
|
|
||||||
this.emit(import_events.Events.BrowserContext.ServiceWorker, serviceWorker);
|
|
||||||
});
|
|
||||||
this._channel.on("console", (event) => {
|
|
||||||
const consoleMessage = new import_consoleMessage.ConsoleMessage(this._platform, event);
|
|
||||||
this.emit(import_events.Events.BrowserContext.Console, consoleMessage);
|
|
||||||
const page = consoleMessage.page();
|
|
||||||
if (page)
|
|
||||||
page.emit(import_events.Events.Page.Console, consoleMessage);
|
|
||||||
});
|
|
||||||
this._channel.on("pageError", ({ error, page }) => {
|
|
||||||
const pageObject = import_page.Page.from(page);
|
|
||||||
const parsedError = (0, import_errors.parseError)(error);
|
|
||||||
this.emit(import_events.Events.BrowserContext.WebError, new import_webError.WebError(pageObject, parsedError));
|
|
||||||
if (pageObject)
|
|
||||||
pageObject.emit(import_events.Events.Page.PageError, parsedError);
|
|
||||||
});
|
|
||||||
this._channel.on("dialog", ({ dialog }) => {
|
|
||||||
const dialogObject = import_dialog.Dialog.from(dialog);
|
|
||||||
let hasListeners = this.emit(import_events.Events.BrowserContext.Dialog, dialogObject);
|
|
||||||
const page = dialogObject.page();
|
|
||||||
if (page)
|
|
||||||
hasListeners = page.emit(import_events.Events.Page.Dialog, dialogObject) || hasListeners;
|
|
||||||
if (!hasListeners) {
|
|
||||||
if (dialogObject.type() === "beforeunload")
|
|
||||||
dialog.accept({}).catch(() => {
|
|
||||||
});
|
|
||||||
else
|
|
||||||
dialog.dismiss().catch(() => {
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
this._channel.on("request", ({ request, page }) => this._onRequest(network.Request.from(request), import_page.Page.fromNullable(page)));
|
|
||||||
this._channel.on("requestFailed", ({ request, failureText, responseEndTiming, page }) => this._onRequestFailed(network.Request.from(request), responseEndTiming, failureText, import_page.Page.fromNullable(page)));
|
|
||||||
this._channel.on("requestFinished", (params) => this._onRequestFinished(params));
|
|
||||||
this._channel.on("response", ({ response, page }) => this._onResponse(network.Response.from(response), import_page.Page.fromNullable(page)));
|
|
||||||
this._closedPromise = new Promise((f) => this.once(import_events.Events.BrowserContext.Close, f));
|
|
||||||
this._setEventToSubscriptionMapping(/* @__PURE__ */ new Map([
|
|
||||||
[import_events.Events.BrowserContext.Console, "console"],
|
|
||||||
[import_events.Events.BrowserContext.Dialog, "dialog"],
|
|
||||||
[import_events.Events.BrowserContext.Request, "request"],
|
|
||||||
[import_events.Events.BrowserContext.Response, "response"],
|
|
||||||
[import_events.Events.BrowserContext.RequestFinished, "requestFinished"],
|
|
||||||
[import_events.Events.BrowserContext.RequestFailed, "requestFailed"]
|
|
||||||
]));
|
|
||||||
}
|
|
||||||
static from(context) {
|
|
||||||
return context._object;
|
|
||||||
}
|
|
||||||
static fromNullable(context) {
|
|
||||||
return context ? BrowserContext.from(context) : null;
|
|
||||||
}
|
|
||||||
_setOptions(contextOptions, browserOptions) {
|
|
||||||
this._options = contextOptions;
|
|
||||||
if (this._options.recordHar)
|
|
||||||
this._harRecorders.set("", { path: this._options.recordHar.path, content: this._options.recordHar.content });
|
|
||||||
this.tracing._tracesDir = browserOptions.tracesDir;
|
|
||||||
}
|
|
||||||
_onPage(page) {
|
|
||||||
this._pages.add(page);
|
|
||||||
this.emit(import_events.Events.BrowserContext.Page, page);
|
|
||||||
if (page._opener && !page._opener.isClosed())
|
|
||||||
page._opener.emit(import_events.Events.Page.Popup, page);
|
|
||||||
}
|
|
||||||
_onRequest(request, page) {
|
|
||||||
this.emit(import_events.Events.BrowserContext.Request, request);
|
|
||||||
if (page)
|
|
||||||
page.emit(import_events.Events.Page.Request, request);
|
|
||||||
}
|
|
||||||
_onResponse(response, page) {
|
|
||||||
this.emit(import_events.Events.BrowserContext.Response, response);
|
|
||||||
if (page)
|
|
||||||
page.emit(import_events.Events.Page.Response, response);
|
|
||||||
}
|
|
||||||
_onRequestFailed(request, responseEndTiming, failureText, page) {
|
|
||||||
request._failureText = failureText || null;
|
|
||||||
request._setResponseEndTiming(responseEndTiming);
|
|
||||||
this.emit(import_events.Events.BrowserContext.RequestFailed, request);
|
|
||||||
if (page)
|
|
||||||
page.emit(import_events.Events.Page.RequestFailed, request);
|
|
||||||
}
|
|
||||||
_onRequestFinished(params) {
|
|
||||||
const { responseEndTiming } = params;
|
|
||||||
const request = network.Request.from(params.request);
|
|
||||||
const response = network.Response.fromNullable(params.response);
|
|
||||||
const page = import_page.Page.fromNullable(params.page);
|
|
||||||
request._setResponseEndTiming(responseEndTiming);
|
|
||||||
this.emit(import_events.Events.BrowserContext.RequestFinished, request);
|
|
||||||
if (page)
|
|
||||||
page.emit(import_events.Events.Page.RequestFinished, request);
|
|
||||||
if (response)
|
|
||||||
response._finishedPromise.resolve(null);
|
|
||||||
}
|
|
||||||
async _onRoute(route) {
|
|
||||||
route._context = this;
|
|
||||||
const page = route.request()._safePage();
|
|
||||||
const routeHandlers = this._routes.slice();
|
|
||||||
for (const routeHandler of routeHandlers) {
|
|
||||||
if (page?._closeWasCalled || this._closeWasCalled)
|
|
||||||
return;
|
|
||||||
if (!routeHandler.matches(route.request().url()))
|
|
||||||
continue;
|
|
||||||
const index = this._routes.indexOf(routeHandler);
|
|
||||||
if (index === -1)
|
|
||||||
continue;
|
|
||||||
if (routeHandler.willExpire())
|
|
||||||
this._routes.splice(index, 1);
|
|
||||||
const handled = await routeHandler.handle(route);
|
|
||||||
if (!this._routes.length)
|
|
||||||
this._wrapApiCall(() => this._updateInterceptionPatterns(), true).catch(() => {
|
|
||||||
});
|
|
||||||
if (handled)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
await route._innerContinue(
|
|
||||||
true
|
|
||||||
/* isFallback */
|
|
||||||
).catch(() => {
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async _onWebSocketRoute(webSocketRoute) {
|
|
||||||
const routeHandler = this._webSocketRoutes.find((route) => route.matches(webSocketRoute.url()));
|
|
||||||
if (routeHandler)
|
|
||||||
await routeHandler.handle(webSocketRoute);
|
|
||||||
else
|
|
||||||
webSocketRoute.connectToServer();
|
|
||||||
}
|
|
||||||
async _onBinding(bindingCall) {
|
|
||||||
const func = this._bindings.get(bindingCall._initializer.name);
|
|
||||||
if (!func)
|
|
||||||
return;
|
|
||||||
await bindingCall.call(func);
|
|
||||||
}
|
|
||||||
setDefaultNavigationTimeout(timeout) {
|
|
||||||
this._timeoutSettings.setDefaultNavigationTimeout(timeout);
|
|
||||||
this._wrapApiCall(async () => {
|
|
||||||
await this._channel.setDefaultNavigationTimeoutNoReply({ timeout });
|
|
||||||
}, true).catch(() => {
|
|
||||||
});
|
|
||||||
}
|
|
||||||
setDefaultTimeout(timeout) {
|
|
||||||
this._timeoutSettings.setDefaultTimeout(timeout);
|
|
||||||
this._wrapApiCall(async () => {
|
|
||||||
await this._channel.setDefaultTimeoutNoReply({ timeout });
|
|
||||||
}, true).catch(() => {
|
|
||||||
});
|
|
||||||
}
|
|
||||||
browser() {
|
|
||||||
return this._browser;
|
|
||||||
}
|
|
||||||
pages() {
|
|
||||||
return [...this._pages];
|
|
||||||
}
|
|
||||||
async newPage() {
|
|
||||||
if (this._ownerPage)
|
|
||||||
throw new Error("Please use browser.newContext()");
|
|
||||||
return import_page.Page.from((await this._channel.newPage()).page);
|
|
||||||
}
|
|
||||||
async cookies(urls) {
|
|
||||||
if (!urls)
|
|
||||||
urls = [];
|
|
||||||
if (urls && typeof urls === "string")
|
|
||||||
urls = [urls];
|
|
||||||
return (await this._channel.cookies({ urls })).cookies;
|
|
||||||
}
|
|
||||||
async addCookies(cookies) {
|
|
||||||
await this._channel.addCookies({ cookies });
|
|
||||||
}
|
|
||||||
async clearCookies(options = {}) {
|
|
||||||
await this._channel.clearCookies({
|
|
||||||
name: (0, import_rtti.isString)(options.name) ? options.name : void 0,
|
|
||||||
nameRegexSource: (0, import_rtti.isRegExp)(options.name) ? options.name.source : void 0,
|
|
||||||
nameRegexFlags: (0, import_rtti.isRegExp)(options.name) ? options.name.flags : void 0,
|
|
||||||
domain: (0, import_rtti.isString)(options.domain) ? options.domain : void 0,
|
|
||||||
domainRegexSource: (0, import_rtti.isRegExp)(options.domain) ? options.domain.source : void 0,
|
|
||||||
domainRegexFlags: (0, import_rtti.isRegExp)(options.domain) ? options.domain.flags : void 0,
|
|
||||||
path: (0, import_rtti.isString)(options.path) ? options.path : void 0,
|
|
||||||
pathRegexSource: (0, import_rtti.isRegExp)(options.path) ? options.path.source : void 0,
|
|
||||||
pathRegexFlags: (0, import_rtti.isRegExp)(options.path) ? options.path.flags : void 0
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async grantPermissions(permissions, options) {
|
|
||||||
await this._channel.grantPermissions({ permissions, ...options });
|
|
||||||
}
|
|
||||||
async clearPermissions() {
|
|
||||||
await this._channel.clearPermissions();
|
|
||||||
}
|
|
||||||
async setGeolocation(geolocation) {
|
|
||||||
await this._channel.setGeolocation({ geolocation: geolocation || void 0 });
|
|
||||||
}
|
|
||||||
async setExtraHTTPHeaders(headers) {
|
|
||||||
network.validateHeaders(headers);
|
|
||||||
await this._channel.setExtraHTTPHeaders({ headers: (0, import_headers.headersObjectToArray)(headers) });
|
|
||||||
}
|
|
||||||
async setOffline(offline) {
|
|
||||||
await this._channel.setOffline({ offline });
|
|
||||||
}
|
|
||||||
async setHTTPCredentials(httpCredentials) {
|
|
||||||
await this._channel.setHTTPCredentials({ httpCredentials: httpCredentials || void 0 });
|
|
||||||
}
|
|
||||||
async addInitScript(script, arg) {
|
|
||||||
const source = await (0, import_clientHelper.evaluationScript)(this._platform, script, arg);
|
|
||||||
await this._channel.addInitScript({ source });
|
|
||||||
}
|
|
||||||
async exposeBinding(name, callback, options = {}) {
|
|
||||||
await this._channel.exposeBinding({ name, needsHandle: options.handle });
|
|
||||||
this._bindings.set(name, callback);
|
|
||||||
}
|
|
||||||
async exposeFunction(name, callback) {
|
|
||||||
await this._channel.exposeBinding({ name });
|
|
||||||
const binding = (source, ...args) => callback(...args);
|
|
||||||
this._bindings.set(name, binding);
|
|
||||||
}
|
|
||||||
async route(url, handler, options = {}) {
|
|
||||||
this._routes.unshift(new network.RouteHandler(this._platform, this._options.baseURL, url, handler, options.times));
|
|
||||||
await this._updateInterceptionPatterns();
|
|
||||||
}
|
|
||||||
async routeWebSocket(url, handler) {
|
|
||||||
this._webSocketRoutes.unshift(new network.WebSocketRouteHandler(this._options.baseURL, url, handler));
|
|
||||||
await this._updateWebSocketInterceptionPatterns();
|
|
||||||
}
|
|
||||||
async _recordIntoHAR(har, page, options = {}) {
|
|
||||||
const { harId } = await this._channel.harStart({
|
|
||||||
page: page?._channel,
|
|
||||||
options: prepareRecordHarOptions({
|
|
||||||
path: har,
|
|
||||||
content: options.updateContent ?? "attach",
|
|
||||||
mode: options.updateMode ?? "minimal",
|
|
||||||
urlFilter: options.url
|
|
||||||
})
|
|
||||||
});
|
|
||||||
this._harRecorders.set(harId, { path: har, content: options.updateContent ?? "attach" });
|
|
||||||
}
|
|
||||||
async routeFromHAR(har, options = {}) {
|
|
||||||
const localUtils = this._connection.localUtils();
|
|
||||||
if (!localUtils)
|
|
||||||
throw new Error("Route from har is not supported in thin clients");
|
|
||||||
if (options.update) {
|
|
||||||
await this._recordIntoHAR(har, null, options);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const harRouter = await import_harRouter.HarRouter.create(localUtils, har, options.notFound || "abort", { urlMatch: options.url });
|
|
||||||
this._harRouters.push(harRouter);
|
|
||||||
await harRouter.addContextRoute(this);
|
|
||||||
}
|
|
||||||
_disposeHarRouters() {
|
|
||||||
this._harRouters.forEach((router) => router.dispose());
|
|
||||||
this._harRouters = [];
|
|
||||||
}
|
|
||||||
async unrouteAll(options) {
|
|
||||||
await this._unrouteInternal(this._routes, [], options?.behavior);
|
|
||||||
this._disposeHarRouters();
|
|
||||||
}
|
|
||||||
async unroute(url, handler) {
|
|
||||||
const removed = [];
|
|
||||||
const remaining = [];
|
|
||||||
for (const route of this._routes) {
|
|
||||||
if ((0, import_urlMatch.urlMatchesEqual)(route.url, url) && (!handler || route.handler === handler))
|
|
||||||
removed.push(route);
|
|
||||||
else
|
|
||||||
remaining.push(route);
|
|
||||||
}
|
|
||||||
await this._unrouteInternal(removed, remaining, "default");
|
|
||||||
}
|
|
||||||
async _unrouteInternal(removed, remaining, behavior) {
|
|
||||||
this._routes = remaining;
|
|
||||||
await this._updateInterceptionPatterns();
|
|
||||||
if (!behavior || behavior === "default")
|
|
||||||
return;
|
|
||||||
const promises = removed.map((routeHandler) => routeHandler.stop(behavior));
|
|
||||||
await Promise.all(promises);
|
|
||||||
}
|
|
||||||
async _updateInterceptionPatterns() {
|
|
||||||
const patterns = network.RouteHandler.prepareInterceptionPatterns(this._routes);
|
|
||||||
await this._channel.setNetworkInterceptionPatterns({ patterns });
|
|
||||||
}
|
|
||||||
async _updateWebSocketInterceptionPatterns() {
|
|
||||||
const patterns = network.WebSocketRouteHandler.prepareInterceptionPatterns(this._webSocketRoutes);
|
|
||||||
await this._channel.setWebSocketInterceptionPatterns({ patterns });
|
|
||||||
}
|
|
||||||
_effectiveCloseReason() {
|
|
||||||
return this._closeReason || this._browser?._closeReason;
|
|
||||||
}
|
|
||||||
async waitForEvent(event, optionsOrPredicate = {}) {
|
|
||||||
return await this._wrapApiCall(async () => {
|
|
||||||
const timeout = this._timeoutSettings.timeout(typeof optionsOrPredicate === "function" ? {} : optionsOrPredicate);
|
|
||||||
const predicate = typeof optionsOrPredicate === "function" ? optionsOrPredicate : optionsOrPredicate.predicate;
|
|
||||||
const waiter = import_waiter.Waiter.createForEvent(this, event);
|
|
||||||
waiter.rejectOnTimeout(timeout, `Timeout ${timeout}ms exceeded while waiting for event "${event}"`);
|
|
||||||
if (event !== import_events.Events.BrowserContext.Close)
|
|
||||||
waiter.rejectOnEvent(this, import_events.Events.BrowserContext.Close, () => new import_errors.TargetClosedError(this._effectiveCloseReason()));
|
|
||||||
const result = await waiter.waitForEvent(this, event, predicate);
|
|
||||||
waiter.dispose();
|
|
||||||
return result;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async storageState(options = {}) {
|
|
||||||
const state = await this._channel.storageState({ indexedDB: options.indexedDB });
|
|
||||||
if (options.path) {
|
|
||||||
await (0, import_fileUtils.mkdirIfNeeded)(this._platform, options.path);
|
|
||||||
await this._platform.fs().promises.writeFile(options.path, JSON.stringify(state, void 0, 2), "utf8");
|
|
||||||
}
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
backgroundPages() {
|
|
||||||
return [...this._backgroundPages];
|
|
||||||
}
|
|
||||||
serviceWorkers() {
|
|
||||||
return [...this._serviceWorkers];
|
|
||||||
}
|
|
||||||
async newCDPSession(page) {
|
|
||||||
if (!(page instanceof import_page.Page) && !(page instanceof import_frame.Frame))
|
|
||||||
throw new Error("page: expected Page or Frame");
|
|
||||||
const result = await this._channel.newCDPSession(page instanceof import_page.Page ? { page: page._channel } : { frame: page._channel });
|
|
||||||
return import_cdpSession.CDPSession.from(result.session);
|
|
||||||
}
|
|
||||||
_onClose() {
|
|
||||||
if (this._browser)
|
|
||||||
this._browser._contexts.delete(this);
|
|
||||||
this._browserType?._contexts?.delete(this);
|
|
||||||
this._disposeHarRouters();
|
|
||||||
this.tracing._resetStackCounter();
|
|
||||||
this.emit(import_events.Events.BrowserContext.Close, this);
|
|
||||||
}
|
|
||||||
async [Symbol.asyncDispose]() {
|
|
||||||
await this.close();
|
|
||||||
}
|
|
||||||
async close(options = {}) {
|
|
||||||
if (this._closeWasCalled)
|
|
||||||
return;
|
|
||||||
this._closeReason = options.reason;
|
|
||||||
this._closeWasCalled = true;
|
|
||||||
await this._wrapApiCall(async () => {
|
|
||||||
await this.request.dispose(options);
|
|
||||||
}, true);
|
|
||||||
await this._wrapApiCall(async () => {
|
|
||||||
await this._browserType?._willCloseContext(this);
|
|
||||||
for (const [harId, harParams] of this._harRecorders) {
|
|
||||||
const har = await this._channel.harExport({ harId });
|
|
||||||
const artifact = import_artifact.Artifact.from(har.artifact);
|
|
||||||
const isCompressed = harParams.content === "attach" || harParams.path.endsWith(".zip");
|
|
||||||
const needCompressed = harParams.path.endsWith(".zip");
|
|
||||||
if (isCompressed && !needCompressed) {
|
|
||||||
const localUtils = this._connection.localUtils();
|
|
||||||
if (!localUtils)
|
|
||||||
throw new Error("Uncompressed har is not supported in thin clients");
|
|
||||||
await artifact.saveAs(harParams.path + ".tmp");
|
|
||||||
await localUtils.harUnzip({ zipFile: harParams.path + ".tmp", harFile: harParams.path });
|
|
||||||
} else {
|
|
||||||
await artifact.saveAs(harParams.path);
|
|
||||||
}
|
|
||||||
await artifact.delete();
|
|
||||||
}
|
|
||||||
}, true);
|
|
||||||
await this._channel.close(options);
|
|
||||||
await this._closedPromise;
|
|
||||||
}
|
|
||||||
async _enableRecorder(params) {
|
|
||||||
await this._channel.enableRecorder(params);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
async function prepareStorageState(platform, options) {
|
|
||||||
if (typeof options.storageState !== "string")
|
|
||||||
return options.storageState;
|
|
||||||
try {
|
|
||||||
return JSON.parse(await platform.fs().promises.readFile(options.storageState, "utf8"));
|
|
||||||
} catch (e) {
|
|
||||||
(0, import_stackTrace.rewriteErrorMessage)(e, `Error reading storage state from ${options.storageState}:
|
|
||||||
` + e.message);
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function prepareRecordHarOptions(options) {
|
|
||||||
if (!options)
|
|
||||||
return;
|
|
||||||
return {
|
|
||||||
path: options.path,
|
|
||||||
content: options.content || (options.omitContent ? "omit" : void 0),
|
|
||||||
urlGlob: (0, import_rtti.isString)(options.urlFilter) ? options.urlFilter : void 0,
|
|
||||||
urlRegexSource: (0, import_rtti.isRegExp)(options.urlFilter) ? options.urlFilter.source : void 0,
|
|
||||||
urlRegexFlags: (0, import_rtti.isRegExp)(options.urlFilter) ? options.urlFilter.flags : void 0,
|
|
||||||
mode: options.mode
|
|
||||||
};
|
|
||||||
}
|
|
||||||
async function prepareBrowserContextParams(platform, options) {
|
|
||||||
if (options.videoSize && !options.videosPath)
|
|
||||||
throw new Error(`"videoSize" option requires "videosPath" to be specified`);
|
|
||||||
if (options.extraHTTPHeaders)
|
|
||||||
network.validateHeaders(options.extraHTTPHeaders);
|
|
||||||
const contextParams = {
|
|
||||||
...options,
|
|
||||||
viewport: options.viewport === null ? void 0 : options.viewport,
|
|
||||||
noDefaultViewport: options.viewport === null,
|
|
||||||
extraHTTPHeaders: options.extraHTTPHeaders ? (0, import_headers.headersObjectToArray)(options.extraHTTPHeaders) : void 0,
|
|
||||||
storageState: await prepareStorageState(platform, options),
|
|
||||||
serviceWorkers: options.serviceWorkers,
|
|
||||||
recordHar: prepareRecordHarOptions(options.recordHar),
|
|
||||||
colorScheme: options.colorScheme === null ? "no-override" : options.colorScheme,
|
|
||||||
reducedMotion: options.reducedMotion === null ? "no-override" : options.reducedMotion,
|
|
||||||
forcedColors: options.forcedColors === null ? "no-override" : options.forcedColors,
|
|
||||||
contrast: options.contrast === null ? "no-override" : options.contrast,
|
|
||||||
acceptDownloads: toAcceptDownloadsProtocol(options.acceptDownloads),
|
|
||||||
clientCertificates: await toClientCertificatesProtocol(platform, options.clientCertificates)
|
|
||||||
};
|
|
||||||
if (!contextParams.recordVideo && options.videosPath) {
|
|
||||||
contextParams.recordVideo = {
|
|
||||||
dir: options.videosPath,
|
|
||||||
size: options.videoSize
|
|
||||||
};
|
|
||||||
}
|
|
||||||
if (contextParams.recordVideo && contextParams.recordVideo.dir)
|
|
||||||
contextParams.recordVideo.dir = platform.path().resolve(contextParams.recordVideo.dir);
|
|
||||||
return contextParams;
|
|
||||||
}
|
|
||||||
function toAcceptDownloadsProtocol(acceptDownloads) {
|
|
||||||
if (acceptDownloads === void 0)
|
|
||||||
return void 0;
|
|
||||||
if (acceptDownloads)
|
|
||||||
return "accept";
|
|
||||||
return "deny";
|
|
||||||
}
|
|
||||||
async function toClientCertificatesProtocol(platform, certs) {
|
|
||||||
if (!certs)
|
|
||||||
return void 0;
|
|
||||||
const bufferizeContent = async (value, path) => {
|
|
||||||
if (value)
|
|
||||||
return value;
|
|
||||||
if (path)
|
|
||||||
return await platform.fs().promises.readFile(path);
|
|
||||||
};
|
|
||||||
return await Promise.all(certs.map(async (cert) => ({
|
|
||||||
origin: cert.origin,
|
|
||||||
cert: await bufferizeContent(cert.cert, cert.certPath),
|
|
||||||
key: await bufferizeContent(cert.key, cert.keyPath),
|
|
||||||
pfx: await bufferizeContent(cert.pfx, cert.pfxPath),
|
|
||||||
passphrase: cert.passphrase
|
|
||||||
})));
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
BrowserContext,
|
|
||||||
prepareBrowserContextParams,
|
|
||||||
toClientCertificatesProtocol
|
|
||||||
});
|
|
||||||
193
tvapp2/node_modules/playwright-core/lib/client/browserType.js
generated
vendored
193
tvapp2/node_modules/playwright-core/lib/client/browserType.js
generated
vendored
@@ -1,193 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var browserType_exports = {};
|
|
||||||
__export(browserType_exports, {
|
|
||||||
BrowserType: () => BrowserType
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(browserType_exports);
|
|
||||||
var import_browser = require("./browser");
|
|
||||||
var import_browserContext = require("./browserContext");
|
|
||||||
var import_channelOwner = require("./channelOwner");
|
|
||||||
var import_clientHelper = require("./clientHelper");
|
|
||||||
var import_events = require("./events");
|
|
||||||
var import_assert = require("../utils/isomorphic/assert");
|
|
||||||
var import_headers = require("../utils/isomorphic/headers");
|
|
||||||
var import_time = require("../utils/isomorphic/time");
|
|
||||||
var import_timeoutRunner = require("../utils/isomorphic/timeoutRunner");
|
|
||||||
var import_webSocket = require("./webSocket");
|
|
||||||
class BrowserType extends import_channelOwner.ChannelOwner {
|
|
||||||
constructor() {
|
|
||||||
super(...arguments);
|
|
||||||
this._contexts = /* @__PURE__ */ new Set();
|
|
||||||
}
|
|
||||||
static from(browserType) {
|
|
||||||
return browserType._object;
|
|
||||||
}
|
|
||||||
executablePath() {
|
|
||||||
if (!this._initializer.executablePath)
|
|
||||||
throw new Error("Browser is not supported on current platform");
|
|
||||||
return this._initializer.executablePath;
|
|
||||||
}
|
|
||||||
name() {
|
|
||||||
return this._initializer.name;
|
|
||||||
}
|
|
||||||
async launch(options = {}) {
|
|
||||||
(0, import_assert.assert)(!options.userDataDir, "userDataDir option is not supported in `browserType.launch`. Use `browserType.launchPersistentContext` instead");
|
|
||||||
(0, import_assert.assert)(!options.port, "Cannot specify a port without launching as a server.");
|
|
||||||
const logger = options.logger || this._playwright._defaultLaunchOptions?.logger;
|
|
||||||
options = { ...this._playwright._defaultLaunchOptions, ...options };
|
|
||||||
const launchOptions = {
|
|
||||||
...options,
|
|
||||||
ignoreDefaultArgs: Array.isArray(options.ignoreDefaultArgs) ? options.ignoreDefaultArgs : void 0,
|
|
||||||
ignoreAllDefaultArgs: !!options.ignoreDefaultArgs && !Array.isArray(options.ignoreDefaultArgs),
|
|
||||||
env: options.env ? (0, import_clientHelper.envObjectToArray)(options.env) : void 0
|
|
||||||
};
|
|
||||||
return await this._wrapApiCall(async () => {
|
|
||||||
const browser = import_browser.Browser.from((await this._channel.launch(launchOptions)).browser);
|
|
||||||
this._didLaunchBrowser(browser, options, logger);
|
|
||||||
return browser;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async launchServer(options = {}) {
|
|
||||||
if (!this._serverLauncher)
|
|
||||||
throw new Error("Launching server is not supported");
|
|
||||||
options = { ...this._playwright._defaultLaunchOptions, ...options };
|
|
||||||
return await this._serverLauncher.launchServer(options);
|
|
||||||
}
|
|
||||||
async launchPersistentContext(userDataDir, options = {}) {
|
|
||||||
const logger = options.logger || this._playwright._defaultLaunchOptions?.logger;
|
|
||||||
(0, import_assert.assert)(!options.port, "Cannot specify a port without launching as a server.");
|
|
||||||
options = { ...this._playwright._defaultLaunchOptions, ...this._playwright._defaultContextOptions, ...options };
|
|
||||||
const contextParams = await (0, import_browserContext.prepareBrowserContextParams)(this._platform, options);
|
|
||||||
const persistentParams = {
|
|
||||||
...contextParams,
|
|
||||||
ignoreDefaultArgs: Array.isArray(options.ignoreDefaultArgs) ? options.ignoreDefaultArgs : void 0,
|
|
||||||
ignoreAllDefaultArgs: !!options.ignoreDefaultArgs && !Array.isArray(options.ignoreDefaultArgs),
|
|
||||||
env: options.env ? (0, import_clientHelper.envObjectToArray)(options.env) : void 0,
|
|
||||||
channel: options.channel,
|
|
||||||
userDataDir: this._platform.path().isAbsolute(userDataDir) || !userDataDir ? userDataDir : this._platform.path().resolve(userDataDir)
|
|
||||||
};
|
|
||||||
return await this._wrapApiCall(async () => {
|
|
||||||
const result = await this._channel.launchPersistentContext(persistentParams);
|
|
||||||
const context = import_browserContext.BrowserContext.from(result.context);
|
|
||||||
await this._didCreateContext(context, contextParams, options, logger);
|
|
||||||
return context;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async connect(optionsOrWsEndpoint, options) {
|
|
||||||
if (typeof optionsOrWsEndpoint === "string")
|
|
||||||
return await this._connect({ ...options, wsEndpoint: optionsOrWsEndpoint });
|
|
||||||
(0, import_assert.assert)(optionsOrWsEndpoint.wsEndpoint, "options.wsEndpoint is required");
|
|
||||||
return await this._connect(optionsOrWsEndpoint);
|
|
||||||
}
|
|
||||||
async _connect(params) {
|
|
||||||
const logger = params.logger;
|
|
||||||
return await this._wrapApiCall(async () => {
|
|
||||||
const deadline = params.timeout ? (0, import_time.monotonicTime)() + params.timeout : 0;
|
|
||||||
const headers = { "x-playwright-browser": this.name(), ...params.headers };
|
|
||||||
const connectParams = {
|
|
||||||
wsEndpoint: params.wsEndpoint,
|
|
||||||
headers,
|
|
||||||
exposeNetwork: params.exposeNetwork ?? params._exposeNetwork,
|
|
||||||
slowMo: params.slowMo,
|
|
||||||
timeout: params.timeout
|
|
||||||
};
|
|
||||||
if (params.__testHookRedirectPortForwarding)
|
|
||||||
connectParams.socksProxyRedirectPortForTest = params.__testHookRedirectPortForwarding;
|
|
||||||
const connection = await (0, import_webSocket.connectOverWebSocket)(this._connection, connectParams);
|
|
||||||
let browser;
|
|
||||||
connection.on("close", () => {
|
|
||||||
for (const context of browser?.contexts() || []) {
|
|
||||||
for (const page of context.pages())
|
|
||||||
page._onClose();
|
|
||||||
context._onClose();
|
|
||||||
}
|
|
||||||
setTimeout(() => browser?._didClose(), 0);
|
|
||||||
});
|
|
||||||
const result = await (0, import_timeoutRunner.raceAgainstDeadline)(async () => {
|
|
||||||
if (params.__testHookBeforeCreateBrowser)
|
|
||||||
await params.__testHookBeforeCreateBrowser();
|
|
||||||
const playwright = await connection.initializePlaywright();
|
|
||||||
if (!playwright._initializer.preLaunchedBrowser) {
|
|
||||||
connection.close();
|
|
||||||
throw new Error("Malformed endpoint. Did you use BrowserType.launchServer method?");
|
|
||||||
}
|
|
||||||
playwright._setSelectors(this._playwright.selectors);
|
|
||||||
browser = import_browser.Browser.from(playwright._initializer.preLaunchedBrowser);
|
|
||||||
this._didLaunchBrowser(browser, {}, logger);
|
|
||||||
browser._shouldCloseConnectionOnClose = true;
|
|
||||||
browser.on(import_events.Events.Browser.Disconnected, () => connection.close());
|
|
||||||
return browser;
|
|
||||||
}, deadline);
|
|
||||||
if (!result.timedOut) {
|
|
||||||
return result.result;
|
|
||||||
} else {
|
|
||||||
connection.close();
|
|
||||||
throw new Error(`Timeout ${params.timeout}ms exceeded`);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async connectOverCDP(endpointURLOrOptions, options) {
|
|
||||||
if (typeof endpointURLOrOptions === "string")
|
|
||||||
return await this._connectOverCDP(endpointURLOrOptions, options);
|
|
||||||
const endpointURL = "endpointURL" in endpointURLOrOptions ? endpointURLOrOptions.endpointURL : endpointURLOrOptions.wsEndpoint;
|
|
||||||
(0, import_assert.assert)(endpointURL, "Cannot connect over CDP without wsEndpoint.");
|
|
||||||
return await this.connectOverCDP(endpointURL, endpointURLOrOptions);
|
|
||||||
}
|
|
||||||
async _connectOverCDP(endpointURL, params = {}) {
|
|
||||||
if (this.name() !== "chromium")
|
|
||||||
throw new Error("Connecting over CDP is only supported in Chromium.");
|
|
||||||
const headers = params.headers ? (0, import_headers.headersObjectToArray)(params.headers) : void 0;
|
|
||||||
const result = await this._channel.connectOverCDP({
|
|
||||||
endpointURL,
|
|
||||||
headers,
|
|
||||||
slowMo: params.slowMo,
|
|
||||||
timeout: params.timeout
|
|
||||||
});
|
|
||||||
const browser = import_browser.Browser.from(result.browser);
|
|
||||||
this._didLaunchBrowser(browser, {}, params.logger);
|
|
||||||
if (result.defaultContext)
|
|
||||||
await this._didCreateContext(import_browserContext.BrowserContext.from(result.defaultContext), {}, {}, params.logger);
|
|
||||||
return browser;
|
|
||||||
}
|
|
||||||
_didLaunchBrowser(browser, browserOptions, logger) {
|
|
||||||
browser._browserType = this;
|
|
||||||
browser._options = browserOptions;
|
|
||||||
browser._logger = logger;
|
|
||||||
}
|
|
||||||
async _didCreateContext(context, contextOptions, browserOptions, logger) {
|
|
||||||
context._logger = logger;
|
|
||||||
context._browserType = this;
|
|
||||||
this._contexts.add(context);
|
|
||||||
context._setOptions(contextOptions, browserOptions);
|
|
||||||
if (this._playwright._defaultContextTimeout !== void 0)
|
|
||||||
context.setDefaultTimeout(this._playwright._defaultContextTimeout);
|
|
||||||
if (this._playwright._defaultContextNavigationTimeout !== void 0)
|
|
||||||
context.setDefaultNavigationTimeout(this._playwright._defaultContextNavigationTimeout);
|
|
||||||
await this._instrumentation.runAfterCreateBrowserContext(context);
|
|
||||||
}
|
|
||||||
async _willCloseContext(context) {
|
|
||||||
this._contexts.delete(context);
|
|
||||||
await this._instrumentation.runBeforeCloseBrowserContext(context);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
BrowserType
|
|
||||||
});
|
|
||||||
51
tvapp2/node_modules/playwright-core/lib/client/cdpSession.js
generated
vendored
51
tvapp2/node_modules/playwright-core/lib/client/cdpSession.js
generated
vendored
@@ -1,51 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var cdpSession_exports = {};
|
|
||||||
__export(cdpSession_exports, {
|
|
||||||
CDPSession: () => CDPSession
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(cdpSession_exports);
|
|
||||||
var import_channelOwner = require("./channelOwner");
|
|
||||||
class CDPSession extends import_channelOwner.ChannelOwner {
|
|
||||||
static from(cdpSession) {
|
|
||||||
return cdpSession._object;
|
|
||||||
}
|
|
||||||
constructor(parent, type, guid, initializer) {
|
|
||||||
super(parent, type, guid, initializer);
|
|
||||||
this._channel.on("event", ({ method, params }) => {
|
|
||||||
this.emit(method, params);
|
|
||||||
});
|
|
||||||
this.on = super.on;
|
|
||||||
this.addListener = super.addListener;
|
|
||||||
this.off = super.removeListener;
|
|
||||||
this.removeListener = super.removeListener;
|
|
||||||
this.once = super.once;
|
|
||||||
}
|
|
||||||
async send(method, params) {
|
|
||||||
const result = await this._channel.send({ method, params });
|
|
||||||
return result.result;
|
|
||||||
}
|
|
||||||
async detach() {
|
|
||||||
return await this._channel.detach();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
CDPSession
|
|
||||||
});
|
|
||||||
205
tvapp2/node_modules/playwright-core/lib/client/channelOwner.js
generated
vendored
205
tvapp2/node_modules/playwright-core/lib/client/channelOwner.js
generated
vendored
@@ -1,205 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var channelOwner_exports = {};
|
|
||||||
__export(channelOwner_exports, {
|
|
||||||
ChannelOwner: () => ChannelOwner
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(channelOwner_exports);
|
|
||||||
var import_eventEmitter = require("./eventEmitter");
|
|
||||||
var import_validator = require("../protocol/validator");
|
|
||||||
var import_clientStackTrace = require("./clientStackTrace");
|
|
||||||
var import_stackTrace = require("../utils/isomorphic/stackTrace");
|
|
||||||
class ChannelOwner extends import_eventEmitter.EventEmitter {
|
|
||||||
constructor(parent, type, guid, initializer) {
|
|
||||||
const connection = parent instanceof ChannelOwner ? parent._connection : parent;
|
|
||||||
super(connection._platform);
|
|
||||||
this._objects = /* @__PURE__ */ new Map();
|
|
||||||
this._eventToSubscriptionMapping = /* @__PURE__ */ new Map();
|
|
||||||
this._isInternalType = false;
|
|
||||||
this._wasCollected = false;
|
|
||||||
this.setMaxListeners(0);
|
|
||||||
this._connection = connection;
|
|
||||||
this._type = type;
|
|
||||||
this._guid = guid;
|
|
||||||
this._parent = parent instanceof ChannelOwner ? parent : void 0;
|
|
||||||
this._instrumentation = this._connection._instrumentation;
|
|
||||||
this._connection._objects.set(guid, this);
|
|
||||||
if (this._parent) {
|
|
||||||
this._parent._objects.set(guid, this);
|
|
||||||
this._logger = this._parent._logger;
|
|
||||||
}
|
|
||||||
this._channel = this._createChannel(new import_eventEmitter.EventEmitter(connection._platform));
|
|
||||||
this._initializer = initializer;
|
|
||||||
}
|
|
||||||
markAsInternalType() {
|
|
||||||
this._isInternalType = true;
|
|
||||||
}
|
|
||||||
_setEventToSubscriptionMapping(mapping) {
|
|
||||||
this._eventToSubscriptionMapping = mapping;
|
|
||||||
}
|
|
||||||
_updateSubscription(event, enabled) {
|
|
||||||
const protocolEvent = this._eventToSubscriptionMapping.get(String(event));
|
|
||||||
if (protocolEvent) {
|
|
||||||
this._wrapApiCall(async () => {
|
|
||||||
await this._channel.updateSubscription({ event: protocolEvent, enabled });
|
|
||||||
}, true).catch(() => {
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
on(event, listener) {
|
|
||||||
if (!this.listenerCount(event))
|
|
||||||
this._updateSubscription(event, true);
|
|
||||||
super.on(event, listener);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
addListener(event, listener) {
|
|
||||||
if (!this.listenerCount(event))
|
|
||||||
this._updateSubscription(event, true);
|
|
||||||
super.addListener(event, listener);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
prependListener(event, listener) {
|
|
||||||
if (!this.listenerCount(event))
|
|
||||||
this._updateSubscription(event, true);
|
|
||||||
super.prependListener(event, listener);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
off(event, listener) {
|
|
||||||
super.off(event, listener);
|
|
||||||
if (!this.listenerCount(event))
|
|
||||||
this._updateSubscription(event, false);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
removeListener(event, listener) {
|
|
||||||
super.removeListener(event, listener);
|
|
||||||
if (!this.listenerCount(event))
|
|
||||||
this._updateSubscription(event, false);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
_adopt(child) {
|
|
||||||
child._parent._objects.delete(child._guid);
|
|
||||||
this._objects.set(child._guid, child);
|
|
||||||
child._parent = this;
|
|
||||||
}
|
|
||||||
_dispose(reason) {
|
|
||||||
if (this._parent)
|
|
||||||
this._parent._objects.delete(this._guid);
|
|
||||||
this._connection._objects.delete(this._guid);
|
|
||||||
this._wasCollected = reason === "gc";
|
|
||||||
for (const object of [...this._objects.values()])
|
|
||||||
object._dispose(reason);
|
|
||||||
this._objects.clear();
|
|
||||||
}
|
|
||||||
_debugScopeState() {
|
|
||||||
return {
|
|
||||||
_guid: this._guid,
|
|
||||||
objects: Array.from(this._objects.values()).map((o) => o._debugScopeState())
|
|
||||||
};
|
|
||||||
}
|
|
||||||
_validatorToWireContext() {
|
|
||||||
return {
|
|
||||||
tChannelImpl: tChannelImplToWire,
|
|
||||||
binary: this._connection.rawBuffers() ? "buffer" : "toBase64",
|
|
||||||
isUnderTest: () => this._platform.isUnderTest()
|
|
||||||
};
|
|
||||||
}
|
|
||||||
_createChannel(base) {
|
|
||||||
const channel = new Proxy(base, {
|
|
||||||
get: (obj, prop) => {
|
|
||||||
if (typeof prop === "string") {
|
|
||||||
const validator = (0, import_validator.maybeFindValidator)(this._type, prop, "Params");
|
|
||||||
if (validator) {
|
|
||||||
return async (params) => {
|
|
||||||
return await this._wrapApiCall(async (apiZone) => {
|
|
||||||
const validatedParams = validator(params, "", this._validatorToWireContext());
|
|
||||||
if (!apiZone.isInternal && !apiZone.reported) {
|
|
||||||
apiZone.params = params;
|
|
||||||
apiZone.reported = true;
|
|
||||||
this._instrumentation.onApiCallBegin(apiZone);
|
|
||||||
logApiCall(this._platform, this._logger, `=> ${apiZone.apiName} started`);
|
|
||||||
return await this._connection.sendMessageToServer(this, prop, validatedParams, apiZone.apiName, apiZone.frames, apiZone.stepId);
|
|
||||||
}
|
|
||||||
return await this._connection.sendMessageToServer(this, prop, validatedParams, void 0, [], void 0);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return obj[prop];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
channel._object = this;
|
|
||||||
return channel;
|
|
||||||
}
|
|
||||||
async _wrapApiCall(func, isInternal) {
|
|
||||||
const logger = this._logger;
|
|
||||||
const existingApiZone = this._platform.zones.current().data();
|
|
||||||
if (existingApiZone)
|
|
||||||
return await func(existingApiZone);
|
|
||||||
if (isInternal === void 0)
|
|
||||||
isInternal = this._isInternalType;
|
|
||||||
const stackTrace = (0, import_clientStackTrace.captureLibraryStackTrace)(this._platform);
|
|
||||||
const apiZone = { apiName: stackTrace.apiName, frames: stackTrace.frames, isInternal, reported: false, userData: void 0, stepId: void 0 };
|
|
||||||
try {
|
|
||||||
const result = await this._platform.zones.current().push(apiZone).run(async () => await func(apiZone));
|
|
||||||
if (!isInternal) {
|
|
||||||
logApiCall(this._platform, logger, `<= ${apiZone.apiName} succeeded`);
|
|
||||||
this._instrumentation.onApiCallEnd(apiZone);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
} catch (e) {
|
|
||||||
const innerError = (this._platform.showInternalStackFrames() || this._platform.isUnderTest()) && e.stack ? "\n<inner error>\n" + e.stack : "";
|
|
||||||
if (apiZone.apiName && !apiZone.apiName.includes("<anonymous>"))
|
|
||||||
e.message = apiZone.apiName + ": " + e.message;
|
|
||||||
const stackFrames = "\n" + (0, import_stackTrace.stringifyStackFrames)(stackTrace.frames).join("\n") + innerError;
|
|
||||||
if (stackFrames.trim())
|
|
||||||
e.stack = e.message + stackFrames;
|
|
||||||
else
|
|
||||||
e.stack = "";
|
|
||||||
if (!isInternal) {
|
|
||||||
apiZone.error = e;
|
|
||||||
logApiCall(this._platform, logger, `<= ${apiZone.apiName} failed`);
|
|
||||||
this._instrumentation.onApiCallEnd(apiZone);
|
|
||||||
}
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_toImpl() {
|
|
||||||
return this._connection.toImpl?.(this);
|
|
||||||
}
|
|
||||||
toJSON() {
|
|
||||||
return {
|
|
||||||
_type: this._type,
|
|
||||||
_guid: this._guid
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function logApiCall(platform, logger, message) {
|
|
||||||
if (logger && logger.isEnabled("api", "info"))
|
|
||||||
logger.log("api", "info", message, [], { color: "cyan" });
|
|
||||||
platform.log("api", message);
|
|
||||||
}
|
|
||||||
function tChannelImplToWire(names, arg, path, context) {
|
|
||||||
if (arg._object instanceof ChannelOwner && (names === "*" || names.includes(arg._object._type)))
|
|
||||||
return { guid: arg._object._guid };
|
|
||||||
throw new import_validator.ValidationError(`${path}: expected channel ${names.toString()}`);
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
ChannelOwner
|
|
||||||
});
|
|
||||||
64
tvapp2/node_modules/playwright-core/lib/client/clientHelper.js
generated
vendored
64
tvapp2/node_modules/playwright-core/lib/client/clientHelper.js
generated
vendored
@@ -1,64 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var clientHelper_exports = {};
|
|
||||||
__export(clientHelper_exports, {
|
|
||||||
addSourceUrlToScript: () => addSourceUrlToScript,
|
|
||||||
envObjectToArray: () => envObjectToArray,
|
|
||||||
evaluationScript: () => evaluationScript
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(clientHelper_exports);
|
|
||||||
var import_rtti = require("../utils/isomorphic/rtti");
|
|
||||||
function envObjectToArray(env) {
|
|
||||||
const result = [];
|
|
||||||
for (const name in env) {
|
|
||||||
if (!Object.is(env[name], void 0))
|
|
||||||
result.push({ name, value: String(env[name]) });
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
async function evaluationScript(platform, fun, arg, addSourceUrl = true) {
|
|
||||||
if (typeof fun === "function") {
|
|
||||||
const source = fun.toString();
|
|
||||||
const argString = Object.is(arg, void 0) ? "undefined" : JSON.stringify(arg);
|
|
||||||
return `(${source})(${argString})`;
|
|
||||||
}
|
|
||||||
if (arg !== void 0)
|
|
||||||
throw new Error("Cannot evaluate a string with arguments");
|
|
||||||
if ((0, import_rtti.isString)(fun))
|
|
||||||
return fun;
|
|
||||||
if (fun.content !== void 0)
|
|
||||||
return fun.content;
|
|
||||||
if (fun.path !== void 0) {
|
|
||||||
let source = await platform.fs().promises.readFile(fun.path, "utf8");
|
|
||||||
if (addSourceUrl)
|
|
||||||
source = addSourceUrlToScript(source, fun.path);
|
|
||||||
return source;
|
|
||||||
}
|
|
||||||
throw new Error("Either path or content property must be present");
|
|
||||||
}
|
|
||||||
function addSourceUrlToScript(source, path) {
|
|
||||||
return `${source}
|
|
||||||
//# sourceURL=${path.replace(/\n/g, "")}`;
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
addSourceUrlToScript,
|
|
||||||
envObjectToArray,
|
|
||||||
evaluationScript
|
|
||||||
});
|
|
||||||
55
tvapp2/node_modules/playwright-core/lib/client/clientInstrumentation.js
generated
vendored
55
tvapp2/node_modules/playwright-core/lib/client/clientInstrumentation.js
generated
vendored
@@ -1,55 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var clientInstrumentation_exports = {};
|
|
||||||
__export(clientInstrumentation_exports, {
|
|
||||||
createInstrumentation: () => createInstrumentation
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(clientInstrumentation_exports);
|
|
||||||
function createInstrumentation() {
|
|
||||||
const listeners = [];
|
|
||||||
return new Proxy({}, {
|
|
||||||
get: (obj, prop) => {
|
|
||||||
if (typeof prop !== "string")
|
|
||||||
return obj[prop];
|
|
||||||
if (prop === "addListener")
|
|
||||||
return (listener) => listeners.push(listener);
|
|
||||||
if (prop === "removeListener")
|
|
||||||
return (listener) => listeners.splice(listeners.indexOf(listener), 1);
|
|
||||||
if (prop === "removeAllListeners")
|
|
||||||
return () => listeners.splice(0, listeners.length);
|
|
||||||
if (prop.startsWith("run")) {
|
|
||||||
return async (...params) => {
|
|
||||||
for (const listener of listeners)
|
|
||||||
await listener[prop]?.(...params);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
if (prop.startsWith("on")) {
|
|
||||||
return (...params) => {
|
|
||||||
for (const listener of listeners)
|
|
||||||
listener[prop]?.(...params);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
return obj[prop];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
createInstrumentation
|
|
||||||
});
|
|
||||||
68
tvapp2/node_modules/playwright-core/lib/client/clock.js
generated
vendored
68
tvapp2/node_modules/playwright-core/lib/client/clock.js
generated
vendored
@@ -1,68 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var clock_exports = {};
|
|
||||||
__export(clock_exports, {
|
|
||||||
Clock: () => Clock
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(clock_exports);
|
|
||||||
class Clock {
|
|
||||||
constructor(browserContext) {
|
|
||||||
this._browserContext = browserContext;
|
|
||||||
}
|
|
||||||
async install(options = {}) {
|
|
||||||
await this._browserContext._channel.clockInstall(options.time !== void 0 ? parseTime(options.time) : {});
|
|
||||||
}
|
|
||||||
async fastForward(ticks) {
|
|
||||||
await this._browserContext._channel.clockFastForward(parseTicks(ticks));
|
|
||||||
}
|
|
||||||
async pauseAt(time) {
|
|
||||||
await this._browserContext._channel.clockPauseAt(parseTime(time));
|
|
||||||
}
|
|
||||||
async resume() {
|
|
||||||
await this._browserContext._channel.clockResume({});
|
|
||||||
}
|
|
||||||
async runFor(ticks) {
|
|
||||||
await this._browserContext._channel.clockRunFor(parseTicks(ticks));
|
|
||||||
}
|
|
||||||
async setFixedTime(time) {
|
|
||||||
await this._browserContext._channel.clockSetFixedTime(parseTime(time));
|
|
||||||
}
|
|
||||||
async setSystemTime(time) {
|
|
||||||
await this._browserContext._channel.clockSetSystemTime(parseTime(time));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function parseTime(time) {
|
|
||||||
if (typeof time === "number")
|
|
||||||
return { timeNumber: time };
|
|
||||||
if (typeof time === "string")
|
|
||||||
return { timeString: time };
|
|
||||||
if (!isFinite(time.getTime()))
|
|
||||||
throw new Error(`Invalid date: ${time}`);
|
|
||||||
return { timeNumber: time.getTime() };
|
|
||||||
}
|
|
||||||
function parseTicks(ticks) {
|
|
||||||
return {
|
|
||||||
ticksNumber: typeof ticks === "number" ? ticks : void 0,
|
|
||||||
ticksString: typeof ticks === "string" ? ticks : void 0
|
|
||||||
};
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
Clock
|
|
||||||
});
|
|
||||||
318
tvapp2/node_modules/playwright-core/lib/client/connection.js
generated
vendored
318
tvapp2/node_modules/playwright-core/lib/client/connection.js
generated
vendored
@@ -1,318 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var connection_exports = {};
|
|
||||||
__export(connection_exports, {
|
|
||||||
Connection: () => Connection
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(connection_exports);
|
|
||||||
var import_eventEmitter = require("./eventEmitter");
|
|
||||||
var import_android = require("./android");
|
|
||||||
var import_artifact = require("./artifact");
|
|
||||||
var import_browser = require("./browser");
|
|
||||||
var import_browserContext = require("./browserContext");
|
|
||||||
var import_browserType = require("./browserType");
|
|
||||||
var import_cdpSession = require("./cdpSession");
|
|
||||||
var import_channelOwner = require("./channelOwner");
|
|
||||||
var import_clientInstrumentation = require("./clientInstrumentation");
|
|
||||||
var import_dialog = require("./dialog");
|
|
||||||
var import_electron = require("./electron");
|
|
||||||
var import_elementHandle = require("./elementHandle");
|
|
||||||
var import_errors = require("./errors");
|
|
||||||
var import_fetch = require("./fetch");
|
|
||||||
var import_frame = require("./frame");
|
|
||||||
var import_jsHandle = require("./jsHandle");
|
|
||||||
var import_jsonPipe = require("./jsonPipe");
|
|
||||||
var import_localUtils = require("./localUtils");
|
|
||||||
var import_network = require("./network");
|
|
||||||
var import_page = require("./page");
|
|
||||||
var import_playwright = require("./playwright");
|
|
||||||
var import_selectors = require("./selectors");
|
|
||||||
var import_stream = require("./stream");
|
|
||||||
var import_tracing = require("./tracing");
|
|
||||||
var import_worker = require("./worker");
|
|
||||||
var import_writableStream = require("./writableStream");
|
|
||||||
var import_validator = require("../protocol/validator");
|
|
||||||
var import_stackTrace = require("../utils/isomorphic/stackTrace");
|
|
||||||
class Root extends import_channelOwner.ChannelOwner {
|
|
||||||
constructor(connection) {
|
|
||||||
super(connection, "Root", "", {});
|
|
||||||
}
|
|
||||||
async initialize() {
|
|
||||||
return import_playwright.Playwright.from((await this._channel.initialize({
|
|
||||||
sdkLanguage: "javascript"
|
|
||||||
})).playwright);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
class DummyChannelOwner extends import_channelOwner.ChannelOwner {
|
|
||||||
}
|
|
||||||
class Connection extends import_eventEmitter.EventEmitter {
|
|
||||||
constructor(platform, localUtils, instrumentation, headers = []) {
|
|
||||||
super(platform);
|
|
||||||
this._objects = /* @__PURE__ */ new Map();
|
|
||||||
this.onmessage = (message) => {
|
|
||||||
};
|
|
||||||
this._lastId = 0;
|
|
||||||
this._callbacks = /* @__PURE__ */ new Map();
|
|
||||||
this._isRemote = false;
|
|
||||||
this._rawBuffers = false;
|
|
||||||
this._tracingCount = 0;
|
|
||||||
this._instrumentation = instrumentation || (0, import_clientInstrumentation.createInstrumentation)();
|
|
||||||
this._localUtils = localUtils;
|
|
||||||
this._rootObject = new Root(this);
|
|
||||||
this.headers = headers;
|
|
||||||
}
|
|
||||||
markAsRemote() {
|
|
||||||
this._isRemote = true;
|
|
||||||
}
|
|
||||||
isRemote() {
|
|
||||||
return this._isRemote;
|
|
||||||
}
|
|
||||||
useRawBuffers() {
|
|
||||||
this._rawBuffers = true;
|
|
||||||
}
|
|
||||||
rawBuffers() {
|
|
||||||
return this._rawBuffers;
|
|
||||||
}
|
|
||||||
localUtils() {
|
|
||||||
return this._localUtils;
|
|
||||||
}
|
|
||||||
async initializePlaywright() {
|
|
||||||
return await this._rootObject.initialize();
|
|
||||||
}
|
|
||||||
getObjectWithKnownName(guid) {
|
|
||||||
return this._objects.get(guid);
|
|
||||||
}
|
|
||||||
setIsTracing(isTracing) {
|
|
||||||
if (isTracing)
|
|
||||||
this._tracingCount++;
|
|
||||||
else
|
|
||||||
this._tracingCount--;
|
|
||||||
}
|
|
||||||
async sendMessageToServer(object, method, params, apiName, frames, stepId) {
|
|
||||||
if (this._closedError)
|
|
||||||
throw this._closedError;
|
|
||||||
if (object._wasCollected)
|
|
||||||
throw new Error("The object has been collected to prevent unbounded heap growth.");
|
|
||||||
const guid = object._guid;
|
|
||||||
const type = object._type;
|
|
||||||
const id = ++this._lastId;
|
|
||||||
const message = { id, guid, method, params };
|
|
||||||
if (this._platform.isLogEnabled("channel")) {
|
|
||||||
this._platform.log("channel", "SEND> " + JSON.stringify(message));
|
|
||||||
}
|
|
||||||
const location = frames[0] ? { file: frames[0].file, line: frames[0].line, column: frames[0].column } : void 0;
|
|
||||||
const metadata = { apiName, location, internal: !apiName, stepId };
|
|
||||||
if (this._tracingCount && frames && type !== "LocalUtils")
|
|
||||||
this._localUtils?.addStackToTracingNoReply({ callData: { stack: frames, id } }).catch(() => {
|
|
||||||
});
|
|
||||||
this._platform.zones.empty.run(() => this.onmessage({ ...message, metadata }));
|
|
||||||
return await new Promise((resolve, reject) => this._callbacks.set(id, { resolve, reject, apiName, type, method }));
|
|
||||||
}
|
|
||||||
_validatorFromWireContext() {
|
|
||||||
return {
|
|
||||||
tChannelImpl: this._tChannelImplFromWire.bind(this),
|
|
||||||
binary: this._rawBuffers ? "buffer" : "fromBase64",
|
|
||||||
isUnderTest: () => this._platform.isUnderTest()
|
|
||||||
};
|
|
||||||
}
|
|
||||||
dispatch(message) {
|
|
||||||
if (this._closedError)
|
|
||||||
return;
|
|
||||||
const { id, guid, method, params, result, error, log } = message;
|
|
||||||
if (id) {
|
|
||||||
if (this._platform.isLogEnabled("channel"))
|
|
||||||
this._platform.log("channel", "<RECV " + JSON.stringify(message));
|
|
||||||
const callback = this._callbacks.get(id);
|
|
||||||
if (!callback)
|
|
||||||
throw new Error(`Cannot find command to respond: ${id}`);
|
|
||||||
this._callbacks.delete(id);
|
|
||||||
if (error && !result) {
|
|
||||||
const parsedError = (0, import_errors.parseError)(error);
|
|
||||||
(0, import_stackTrace.rewriteErrorMessage)(parsedError, parsedError.message + formatCallLog(this._platform, log));
|
|
||||||
callback.reject(parsedError);
|
|
||||||
} else {
|
|
||||||
const validator2 = (0, import_validator.findValidator)(callback.type, callback.method, "Result");
|
|
||||||
callback.resolve(validator2(result, "", this._validatorFromWireContext()));
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (this._platform.isLogEnabled("channel"))
|
|
||||||
this._platform.log("channel", "<EVENT " + JSON.stringify(message));
|
|
||||||
if (method === "__create__") {
|
|
||||||
this._createRemoteObject(guid, params.type, params.guid, params.initializer);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const object = this._objects.get(guid);
|
|
||||||
if (!object)
|
|
||||||
throw new Error(`Cannot find object to "${method}": ${guid}`);
|
|
||||||
if (method === "__adopt__") {
|
|
||||||
const child = this._objects.get(params.guid);
|
|
||||||
if (!child)
|
|
||||||
throw new Error(`Unknown new child: ${params.guid}`);
|
|
||||||
object._adopt(child);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (method === "__dispose__") {
|
|
||||||
object._dispose(params.reason);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const validator = (0, import_validator.findValidator)(object._type, method, "Event");
|
|
||||||
object._channel.emit(method, validator(params, "", this._validatorFromWireContext()));
|
|
||||||
}
|
|
||||||
close(cause) {
|
|
||||||
if (this._closedError)
|
|
||||||
return;
|
|
||||||
this._closedError = new import_errors.TargetClosedError(cause);
|
|
||||||
for (const callback of this._callbacks.values())
|
|
||||||
callback.reject(this._closedError);
|
|
||||||
this._callbacks.clear();
|
|
||||||
this.emit("close");
|
|
||||||
}
|
|
||||||
_tChannelImplFromWire(names, arg, path, context) {
|
|
||||||
if (arg && typeof arg === "object" && typeof arg.guid === "string") {
|
|
||||||
const object = this._objects.get(arg.guid);
|
|
||||||
if (!object)
|
|
||||||
throw new Error(`Object with guid ${arg.guid} was not bound in the connection`);
|
|
||||||
if (names !== "*" && !names.includes(object._type))
|
|
||||||
throw new import_validator.ValidationError(`${path}: expected channel ${names.toString()}`);
|
|
||||||
return object._channel;
|
|
||||||
}
|
|
||||||
throw new import_validator.ValidationError(`${path}: expected channel ${names.toString()}`);
|
|
||||||
}
|
|
||||||
_createRemoteObject(parentGuid, type, guid, initializer) {
|
|
||||||
const parent = this._objects.get(parentGuid);
|
|
||||||
if (!parent)
|
|
||||||
throw new Error(`Cannot find parent object ${parentGuid} to create ${guid}`);
|
|
||||||
let result;
|
|
||||||
const validator = (0, import_validator.findValidator)(type, "", "Initializer");
|
|
||||||
initializer = validator(initializer, "", this._validatorFromWireContext());
|
|
||||||
switch (type) {
|
|
||||||
case "Android":
|
|
||||||
result = new import_android.Android(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "AndroidSocket":
|
|
||||||
result = new import_android.AndroidSocket(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "AndroidDevice":
|
|
||||||
result = new import_android.AndroidDevice(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "APIRequestContext":
|
|
||||||
result = new import_fetch.APIRequestContext(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "Artifact":
|
|
||||||
result = new import_artifact.Artifact(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "BindingCall":
|
|
||||||
result = new import_page.BindingCall(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "Browser":
|
|
||||||
result = new import_browser.Browser(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "BrowserContext":
|
|
||||||
result = new import_browserContext.BrowserContext(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "BrowserType":
|
|
||||||
result = new import_browserType.BrowserType(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "CDPSession":
|
|
||||||
result = new import_cdpSession.CDPSession(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "Dialog":
|
|
||||||
result = new import_dialog.Dialog(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "Electron":
|
|
||||||
result = new import_electron.Electron(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "ElectronApplication":
|
|
||||||
result = new import_electron.ElectronApplication(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "ElementHandle":
|
|
||||||
result = new import_elementHandle.ElementHandle(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "Frame":
|
|
||||||
result = new import_frame.Frame(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "JSHandle":
|
|
||||||
result = new import_jsHandle.JSHandle(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "JsonPipe":
|
|
||||||
result = new import_jsonPipe.JsonPipe(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "LocalUtils":
|
|
||||||
result = new import_localUtils.LocalUtils(parent, type, guid, initializer);
|
|
||||||
if (!this._localUtils)
|
|
||||||
this._localUtils = result;
|
|
||||||
break;
|
|
||||||
case "Page":
|
|
||||||
result = new import_page.Page(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "Playwright":
|
|
||||||
result = new import_playwright.Playwright(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "Request":
|
|
||||||
result = new import_network.Request(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "Response":
|
|
||||||
result = new import_network.Response(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "Route":
|
|
||||||
result = new import_network.Route(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "Stream":
|
|
||||||
result = new import_stream.Stream(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "Selectors":
|
|
||||||
result = new import_selectors.SelectorsOwner(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "SocksSupport":
|
|
||||||
result = new DummyChannelOwner(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "Tracing":
|
|
||||||
result = new import_tracing.Tracing(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "WebSocket":
|
|
||||||
result = new import_network.WebSocket(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "WebSocketRoute":
|
|
||||||
result = new import_network.WebSocketRoute(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "Worker":
|
|
||||||
result = new import_worker.Worker(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
case "WritableStream":
|
|
||||||
result = new import_writableStream.WritableStream(parent, type, guid, initializer);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new Error("Missing type " + type);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function formatCallLog(platform, log) {
|
|
||||||
if (!log || !log.some((l) => !!l))
|
|
||||||
return "";
|
|
||||||
return `
|
|
||||||
Call log:
|
|
||||||
${platform.colors.dim(log.join("\n"))}
|
|
||||||
`;
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
Connection
|
|
||||||
});
|
|
||||||
55
tvapp2/node_modules/playwright-core/lib/client/consoleMessage.js
generated
vendored
55
tvapp2/node_modules/playwright-core/lib/client/consoleMessage.js
generated
vendored
@@ -1,55 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var consoleMessage_exports = {};
|
|
||||||
__export(consoleMessage_exports, {
|
|
||||||
ConsoleMessage: () => ConsoleMessage
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(consoleMessage_exports);
|
|
||||||
var import_jsHandle = require("./jsHandle");
|
|
||||||
var import_page = require("./page");
|
|
||||||
class ConsoleMessage {
|
|
||||||
constructor(platform, event) {
|
|
||||||
this._page = "page" in event && event.page ? import_page.Page.from(event.page) : null;
|
|
||||||
this._event = event;
|
|
||||||
if (platform.inspectCustom)
|
|
||||||
this[platform.inspectCustom] = () => this._inspect();
|
|
||||||
}
|
|
||||||
page() {
|
|
||||||
return this._page;
|
|
||||||
}
|
|
||||||
type() {
|
|
||||||
return this._event.type;
|
|
||||||
}
|
|
||||||
text() {
|
|
||||||
return this._event.text;
|
|
||||||
}
|
|
||||||
args() {
|
|
||||||
return this._event.args.map(import_jsHandle.JSHandle.from);
|
|
||||||
}
|
|
||||||
location() {
|
|
||||||
return this._event.location;
|
|
||||||
}
|
|
||||||
_inspect() {
|
|
||||||
return this.text();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
ConsoleMessage
|
|
||||||
});
|
|
||||||
44
tvapp2/node_modules/playwright-core/lib/client/coverage.js
generated
vendored
44
tvapp2/node_modules/playwright-core/lib/client/coverage.js
generated
vendored
@@ -1,44 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var coverage_exports = {};
|
|
||||||
__export(coverage_exports, {
|
|
||||||
Coverage: () => Coverage
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(coverage_exports);
|
|
||||||
class Coverage {
|
|
||||||
constructor(channel) {
|
|
||||||
this._channel = channel;
|
|
||||||
}
|
|
||||||
async startJSCoverage(options = {}) {
|
|
||||||
await this._channel.startJSCoverage(options);
|
|
||||||
}
|
|
||||||
async stopJSCoverage() {
|
|
||||||
return (await this._channel.stopJSCoverage()).entries;
|
|
||||||
}
|
|
||||||
async startCSSCoverage(options = {}) {
|
|
||||||
await this._channel.startCSSCoverage(options);
|
|
||||||
}
|
|
||||||
async stopCSSCoverage() {
|
|
||||||
return (await this._channel.stopCSSCoverage()).entries;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
Coverage
|
|
||||||
});
|
|
||||||
56
tvapp2/node_modules/playwright-core/lib/client/dialog.js
generated
vendored
56
tvapp2/node_modules/playwright-core/lib/client/dialog.js
generated
vendored
@@ -1,56 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var dialog_exports = {};
|
|
||||||
__export(dialog_exports, {
|
|
||||||
Dialog: () => Dialog
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(dialog_exports);
|
|
||||||
var import_channelOwner = require("./channelOwner");
|
|
||||||
var import_page = require("./page");
|
|
||||||
class Dialog extends import_channelOwner.ChannelOwner {
|
|
||||||
static from(dialog) {
|
|
||||||
return dialog._object;
|
|
||||||
}
|
|
||||||
constructor(parent, type, guid, initializer) {
|
|
||||||
super(parent, type, guid, initializer);
|
|
||||||
this._page = import_page.Page.fromNullable(initializer.page);
|
|
||||||
}
|
|
||||||
page() {
|
|
||||||
return this._page;
|
|
||||||
}
|
|
||||||
type() {
|
|
||||||
return this._initializer.type;
|
|
||||||
}
|
|
||||||
message() {
|
|
||||||
return this._initializer.message;
|
|
||||||
}
|
|
||||||
defaultValue() {
|
|
||||||
return this._initializer.defaultValue;
|
|
||||||
}
|
|
||||||
async accept(promptText) {
|
|
||||||
await this._channel.accept({ promptText });
|
|
||||||
}
|
|
||||||
async dismiss() {
|
|
||||||
await this._channel.dismiss();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
Dialog
|
|
||||||
});
|
|
||||||
62
tvapp2/node_modules/playwright-core/lib/client/download.js
generated
vendored
62
tvapp2/node_modules/playwright-core/lib/client/download.js
generated
vendored
@@ -1,62 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var download_exports = {};
|
|
||||||
__export(download_exports, {
|
|
||||||
Download: () => Download
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(download_exports);
|
|
||||||
class Download {
|
|
||||||
constructor(page, url, suggestedFilename, artifact) {
|
|
||||||
this._page = page;
|
|
||||||
this._url = url;
|
|
||||||
this._suggestedFilename = suggestedFilename;
|
|
||||||
this._artifact = artifact;
|
|
||||||
}
|
|
||||||
page() {
|
|
||||||
return this._page;
|
|
||||||
}
|
|
||||||
url() {
|
|
||||||
return this._url;
|
|
||||||
}
|
|
||||||
suggestedFilename() {
|
|
||||||
return this._suggestedFilename;
|
|
||||||
}
|
|
||||||
async path() {
|
|
||||||
return await this._artifact.pathAfterFinished();
|
|
||||||
}
|
|
||||||
async saveAs(path) {
|
|
||||||
return await this._artifact.saveAs(path);
|
|
||||||
}
|
|
||||||
async failure() {
|
|
||||||
return await this._artifact.failure();
|
|
||||||
}
|
|
||||||
async createReadStream() {
|
|
||||||
return await this._artifact.createReadStream();
|
|
||||||
}
|
|
||||||
async cancel() {
|
|
||||||
return await this._artifact.cancel();
|
|
||||||
}
|
|
||||||
async delete() {
|
|
||||||
return await this._artifact.delete();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
Download
|
|
||||||
});
|
|
||||||
133
tvapp2/node_modules/playwright-core/lib/client/electron.js
generated
vendored
133
tvapp2/node_modules/playwright-core/lib/client/electron.js
generated
vendored
@@ -1,133 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var electron_exports = {};
|
|
||||||
__export(electron_exports, {
|
|
||||||
Electron: () => Electron,
|
|
||||||
ElectronApplication: () => ElectronApplication
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(electron_exports);
|
|
||||||
var import_browserContext = require("./browserContext");
|
|
||||||
var import_channelOwner = require("./channelOwner");
|
|
||||||
var import_clientHelper = require("./clientHelper");
|
|
||||||
var import_consoleMessage = require("./consoleMessage");
|
|
||||||
var import_errors = require("./errors");
|
|
||||||
var import_events = require("./events");
|
|
||||||
var import_jsHandle = require("./jsHandle");
|
|
||||||
var import_waiter = require("./waiter");
|
|
||||||
var import_timeoutSettings = require("./timeoutSettings");
|
|
||||||
class Electron extends import_channelOwner.ChannelOwner {
|
|
||||||
static from(electron) {
|
|
||||||
return electron._object;
|
|
||||||
}
|
|
||||||
constructor(parent, type, guid, initializer) {
|
|
||||||
super(parent, type, guid, initializer);
|
|
||||||
}
|
|
||||||
async launch(options = {}) {
|
|
||||||
const params = {
|
|
||||||
...await (0, import_browserContext.prepareBrowserContextParams)(this._platform, options),
|
|
||||||
env: (0, import_clientHelper.envObjectToArray)(options.env ? options.env : this._platform.env),
|
|
||||||
tracesDir: options.tracesDir
|
|
||||||
};
|
|
||||||
const app = ElectronApplication.from((await this._channel.launch(params)).electronApplication);
|
|
||||||
app._context._setOptions(params, options);
|
|
||||||
return app;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
class ElectronApplication extends import_channelOwner.ChannelOwner {
|
|
||||||
constructor(parent, type, guid, initializer) {
|
|
||||||
super(parent, type, guid, initializer);
|
|
||||||
this._windows = /* @__PURE__ */ new Set();
|
|
||||||
this._timeoutSettings = new import_timeoutSettings.TimeoutSettings(this._platform);
|
|
||||||
this._context = import_browserContext.BrowserContext.from(initializer.context);
|
|
||||||
for (const page of this._context._pages)
|
|
||||||
this._onPage(page);
|
|
||||||
this._context.on(import_events.Events.BrowserContext.Page, (page) => this._onPage(page));
|
|
||||||
this._channel.on("close", () => {
|
|
||||||
this.emit(import_events.Events.ElectronApplication.Close);
|
|
||||||
});
|
|
||||||
this._channel.on("console", (event) => this.emit(import_events.Events.ElectronApplication.Console, new import_consoleMessage.ConsoleMessage(this._platform, event)));
|
|
||||||
this._setEventToSubscriptionMapping(/* @__PURE__ */ new Map([
|
|
||||||
[import_events.Events.ElectronApplication.Console, "console"]
|
|
||||||
]));
|
|
||||||
}
|
|
||||||
static from(electronApplication) {
|
|
||||||
return electronApplication._object;
|
|
||||||
}
|
|
||||||
process() {
|
|
||||||
return this._toImpl().process();
|
|
||||||
}
|
|
||||||
_onPage(page) {
|
|
||||||
this._windows.add(page);
|
|
||||||
this.emit(import_events.Events.ElectronApplication.Window, page);
|
|
||||||
page.once(import_events.Events.Page.Close, () => this._windows.delete(page));
|
|
||||||
}
|
|
||||||
windows() {
|
|
||||||
return [...this._windows];
|
|
||||||
}
|
|
||||||
async firstWindow(options) {
|
|
||||||
if (this._windows.size)
|
|
||||||
return this._windows.values().next().value;
|
|
||||||
return await this.waitForEvent("window", options);
|
|
||||||
}
|
|
||||||
context() {
|
|
||||||
return this._context;
|
|
||||||
}
|
|
||||||
async [Symbol.asyncDispose]() {
|
|
||||||
await this.close();
|
|
||||||
}
|
|
||||||
async close() {
|
|
||||||
try {
|
|
||||||
await this._context.close();
|
|
||||||
} catch (e) {
|
|
||||||
if ((0, import_errors.isTargetClosedError)(e))
|
|
||||||
return;
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
async waitForEvent(event, optionsOrPredicate = {}) {
|
|
||||||
return await this._wrapApiCall(async () => {
|
|
||||||
const timeout = this._timeoutSettings.timeout(typeof optionsOrPredicate === "function" ? {} : optionsOrPredicate);
|
|
||||||
const predicate = typeof optionsOrPredicate === "function" ? optionsOrPredicate : optionsOrPredicate.predicate;
|
|
||||||
const waiter = import_waiter.Waiter.createForEvent(this, event);
|
|
||||||
waiter.rejectOnTimeout(timeout, `Timeout ${timeout}ms exceeded while waiting for event "${event}"`);
|
|
||||||
if (event !== import_events.Events.ElectronApplication.Close)
|
|
||||||
waiter.rejectOnEvent(this, import_events.Events.ElectronApplication.Close, () => new import_errors.TargetClosedError());
|
|
||||||
const result = await waiter.waitForEvent(this, event, predicate);
|
|
||||||
waiter.dispose();
|
|
||||||
return result;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async browserWindow(page) {
|
|
||||||
const result = await this._channel.browserWindow({ page: page._channel });
|
|
||||||
return import_jsHandle.JSHandle.from(result.handle);
|
|
||||||
}
|
|
||||||
async evaluate(pageFunction, arg) {
|
|
||||||
const result = await this._channel.evaluateExpression({ expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: (0, import_jsHandle.serializeArgument)(arg) });
|
|
||||||
return (0, import_jsHandle.parseResult)(result.value);
|
|
||||||
}
|
|
||||||
async evaluateHandle(pageFunction, arg) {
|
|
||||||
const result = await this._channel.evaluateExpressionHandle({ expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: (0, import_jsHandle.serializeArgument)(arg) });
|
|
||||||
return import_jsHandle.JSHandle.from(result.handle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
Electron,
|
|
||||||
ElectronApplication
|
|
||||||
});
|
|
||||||
284
tvapp2/node_modules/playwright-core/lib/client/elementHandle.js
generated
vendored
284
tvapp2/node_modules/playwright-core/lib/client/elementHandle.js
generated
vendored
@@ -1,284 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var elementHandle_exports = {};
|
|
||||||
__export(elementHandle_exports, {
|
|
||||||
ElementHandle: () => ElementHandle,
|
|
||||||
convertInputFiles: () => convertInputFiles,
|
|
||||||
convertSelectOptionValues: () => convertSelectOptionValues,
|
|
||||||
determineScreenshotType: () => determineScreenshotType
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(elementHandle_exports);
|
|
||||||
var import_frame = require("./frame");
|
|
||||||
var import_jsHandle = require("./jsHandle");
|
|
||||||
var import_assert = require("../utils/isomorphic/assert");
|
|
||||||
var import_fileUtils = require("./fileUtils");
|
|
||||||
var import_rtti = require("../utils/isomorphic/rtti");
|
|
||||||
var import_writableStream = require("./writableStream");
|
|
||||||
var import_mimeType = require("../utils/isomorphic/mimeType");
|
|
||||||
class ElementHandle extends import_jsHandle.JSHandle {
|
|
||||||
static from(handle) {
|
|
||||||
return handle._object;
|
|
||||||
}
|
|
||||||
static fromNullable(handle) {
|
|
||||||
return handle ? ElementHandle.from(handle) : null;
|
|
||||||
}
|
|
||||||
constructor(parent, type, guid, initializer) {
|
|
||||||
super(parent, type, guid, initializer);
|
|
||||||
this._elementChannel = this._channel;
|
|
||||||
}
|
|
||||||
asElement() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
async ownerFrame() {
|
|
||||||
return import_frame.Frame.fromNullable((await this._elementChannel.ownerFrame()).frame);
|
|
||||||
}
|
|
||||||
async contentFrame() {
|
|
||||||
return import_frame.Frame.fromNullable((await this._elementChannel.contentFrame()).frame);
|
|
||||||
}
|
|
||||||
async _generateLocatorString() {
|
|
||||||
const value = (await this._elementChannel.generateLocatorString()).value;
|
|
||||||
return value === void 0 ? null : value;
|
|
||||||
}
|
|
||||||
async getAttribute(name) {
|
|
||||||
const value = (await this._elementChannel.getAttribute({ name })).value;
|
|
||||||
return value === void 0 ? null : value;
|
|
||||||
}
|
|
||||||
async inputValue() {
|
|
||||||
return (await this._elementChannel.inputValue()).value;
|
|
||||||
}
|
|
||||||
async textContent() {
|
|
||||||
const value = (await this._elementChannel.textContent()).value;
|
|
||||||
return value === void 0 ? null : value;
|
|
||||||
}
|
|
||||||
async innerText() {
|
|
||||||
return (await this._elementChannel.innerText()).value;
|
|
||||||
}
|
|
||||||
async innerHTML() {
|
|
||||||
return (await this._elementChannel.innerHTML()).value;
|
|
||||||
}
|
|
||||||
async isChecked() {
|
|
||||||
return (await this._elementChannel.isChecked()).value;
|
|
||||||
}
|
|
||||||
async isDisabled() {
|
|
||||||
return (await this._elementChannel.isDisabled()).value;
|
|
||||||
}
|
|
||||||
async isEditable() {
|
|
||||||
return (await this._elementChannel.isEditable()).value;
|
|
||||||
}
|
|
||||||
async isEnabled() {
|
|
||||||
return (await this._elementChannel.isEnabled()).value;
|
|
||||||
}
|
|
||||||
async isHidden() {
|
|
||||||
return (await this._elementChannel.isHidden()).value;
|
|
||||||
}
|
|
||||||
async isVisible() {
|
|
||||||
return (await this._elementChannel.isVisible()).value;
|
|
||||||
}
|
|
||||||
async dispatchEvent(type, eventInit = {}) {
|
|
||||||
await this._elementChannel.dispatchEvent({ type, eventInit: (0, import_jsHandle.serializeArgument)(eventInit) });
|
|
||||||
}
|
|
||||||
async scrollIntoViewIfNeeded(options = {}) {
|
|
||||||
await this._elementChannel.scrollIntoViewIfNeeded(options);
|
|
||||||
}
|
|
||||||
async hover(options = {}) {
|
|
||||||
await this._elementChannel.hover(options);
|
|
||||||
}
|
|
||||||
async click(options = {}) {
|
|
||||||
return await this._elementChannel.click(options);
|
|
||||||
}
|
|
||||||
async dblclick(options = {}) {
|
|
||||||
return await this._elementChannel.dblclick(options);
|
|
||||||
}
|
|
||||||
async tap(options = {}) {
|
|
||||||
return await this._elementChannel.tap(options);
|
|
||||||
}
|
|
||||||
async selectOption(values, options = {}) {
|
|
||||||
const result = await this._elementChannel.selectOption({ ...convertSelectOptionValues(values), ...options });
|
|
||||||
return result.values;
|
|
||||||
}
|
|
||||||
async fill(value, options = {}) {
|
|
||||||
return await this._elementChannel.fill({ value, ...options });
|
|
||||||
}
|
|
||||||
async selectText(options = {}) {
|
|
||||||
await this._elementChannel.selectText(options);
|
|
||||||
}
|
|
||||||
async setInputFiles(files, options = {}) {
|
|
||||||
const frame = await this.ownerFrame();
|
|
||||||
if (!frame)
|
|
||||||
throw new Error("Cannot set input files to detached element");
|
|
||||||
const converted = await convertInputFiles(this._platform, files, frame.page().context());
|
|
||||||
await this._elementChannel.setInputFiles({ ...converted, ...options });
|
|
||||||
}
|
|
||||||
async focus() {
|
|
||||||
await this._elementChannel.focus();
|
|
||||||
}
|
|
||||||
async type(text, options = {}) {
|
|
||||||
await this._elementChannel.type({ text, ...options });
|
|
||||||
}
|
|
||||||
async press(key, options = {}) {
|
|
||||||
await this._elementChannel.press({ key, ...options });
|
|
||||||
}
|
|
||||||
async check(options = {}) {
|
|
||||||
return await this._elementChannel.check(options);
|
|
||||||
}
|
|
||||||
async uncheck(options = {}) {
|
|
||||||
return await this._elementChannel.uncheck(options);
|
|
||||||
}
|
|
||||||
async setChecked(checked, options) {
|
|
||||||
if (checked)
|
|
||||||
await this.check(options);
|
|
||||||
else
|
|
||||||
await this.uncheck(options);
|
|
||||||
}
|
|
||||||
async boundingBox() {
|
|
||||||
const value = (await this._elementChannel.boundingBox()).value;
|
|
||||||
return value === void 0 ? null : value;
|
|
||||||
}
|
|
||||||
async screenshot(options = {}) {
|
|
||||||
const mask = options.mask;
|
|
||||||
const copy = { ...options, mask: void 0 };
|
|
||||||
if (!copy.type)
|
|
||||||
copy.type = determineScreenshotType(options);
|
|
||||||
if (mask) {
|
|
||||||
copy.mask = mask.map((locator) => ({
|
|
||||||
frame: locator._frame._channel,
|
|
||||||
selector: locator._selector
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
const result = await this._elementChannel.screenshot(copy);
|
|
||||||
if (options.path) {
|
|
||||||
await (0, import_fileUtils.mkdirIfNeeded)(this._platform, options.path);
|
|
||||||
await this._platform.fs().promises.writeFile(options.path, result.binary);
|
|
||||||
}
|
|
||||||
return result.binary;
|
|
||||||
}
|
|
||||||
async $(selector) {
|
|
||||||
return ElementHandle.fromNullable((await this._elementChannel.querySelector({ selector })).element);
|
|
||||||
}
|
|
||||||
async $$(selector) {
|
|
||||||
const result = await this._elementChannel.querySelectorAll({ selector });
|
|
||||||
return result.elements.map((h) => ElementHandle.from(h));
|
|
||||||
}
|
|
||||||
async $eval(selector, pageFunction, arg) {
|
|
||||||
const result = await this._elementChannel.evalOnSelector({ selector, expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: (0, import_jsHandle.serializeArgument)(arg) });
|
|
||||||
return (0, import_jsHandle.parseResult)(result.value);
|
|
||||||
}
|
|
||||||
async $$eval(selector, pageFunction, arg) {
|
|
||||||
const result = await this._elementChannel.evalOnSelectorAll({ selector, expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: (0, import_jsHandle.serializeArgument)(arg) });
|
|
||||||
return (0, import_jsHandle.parseResult)(result.value);
|
|
||||||
}
|
|
||||||
async waitForElementState(state, options = {}) {
|
|
||||||
return await this._elementChannel.waitForElementState({ state, ...options });
|
|
||||||
}
|
|
||||||
async waitForSelector(selector, options = {}) {
|
|
||||||
const result = await this._elementChannel.waitForSelector({ selector, ...options });
|
|
||||||
return ElementHandle.fromNullable(result.element);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function convertSelectOptionValues(values) {
|
|
||||||
if (values === null)
|
|
||||||
return {};
|
|
||||||
if (!Array.isArray(values))
|
|
||||||
values = [values];
|
|
||||||
if (!values.length)
|
|
||||||
return {};
|
|
||||||
for (let i = 0; i < values.length; i++)
|
|
||||||
(0, import_assert.assert)(values[i] !== null, `options[${i}]: expected object, got null`);
|
|
||||||
if (values[0] instanceof ElementHandle)
|
|
||||||
return { elements: values.map((v) => v._elementChannel) };
|
|
||||||
if ((0, import_rtti.isString)(values[0]))
|
|
||||||
return { options: values.map((valueOrLabel) => ({ valueOrLabel })) };
|
|
||||||
return { options: values };
|
|
||||||
}
|
|
||||||
function filePayloadExceedsSizeLimit(payloads) {
|
|
||||||
return payloads.reduce((size, item) => size + (item.buffer ? item.buffer.byteLength : 0), 0) >= import_fileUtils.fileUploadSizeLimit;
|
|
||||||
}
|
|
||||||
async function resolvePathsAndDirectoryForInputFiles(platform, items) {
|
|
||||||
let localPaths;
|
|
||||||
let localDirectory;
|
|
||||||
for (const item of items) {
|
|
||||||
const stat = await platform.fs().promises.stat(item);
|
|
||||||
if (stat.isDirectory()) {
|
|
||||||
if (localDirectory)
|
|
||||||
throw new Error("Multiple directories are not supported");
|
|
||||||
localDirectory = platform.path().resolve(item);
|
|
||||||
} else {
|
|
||||||
localPaths ??= [];
|
|
||||||
localPaths.push(platform.path().resolve(item));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (localPaths?.length && localDirectory)
|
|
||||||
throw new Error("File paths must be all files or a single directory");
|
|
||||||
return [localPaths, localDirectory];
|
|
||||||
}
|
|
||||||
async function convertInputFiles(platform, files, context) {
|
|
||||||
const items = Array.isArray(files) ? files.slice() : [files];
|
|
||||||
if (items.some((item) => typeof item === "string")) {
|
|
||||||
if (!items.every((item) => typeof item === "string"))
|
|
||||||
throw new Error("File paths cannot be mixed with buffers");
|
|
||||||
const [localPaths, localDirectory] = await resolvePathsAndDirectoryForInputFiles(platform, items);
|
|
||||||
if (context._connection.isRemote()) {
|
|
||||||
const files2 = localDirectory ? (await platform.fs().promises.readdir(localDirectory, { withFileTypes: true, recursive: true })).filter((f) => f.isFile()).map((f) => platform.path().join(f.path, f.name)) : localPaths;
|
|
||||||
const { writableStreams, rootDir } = await context._wrapApiCall(async () => context._channel.createTempFiles({
|
|
||||||
rootDirName: localDirectory ? platform.path().basename(localDirectory) : void 0,
|
|
||||||
items: await Promise.all(files2.map(async (file) => {
|
|
||||||
const lastModifiedMs = (await platform.fs().promises.stat(file)).mtimeMs;
|
|
||||||
return {
|
|
||||||
name: localDirectory ? platform.path().relative(localDirectory, file) : platform.path().basename(file),
|
|
||||||
lastModifiedMs
|
|
||||||
};
|
|
||||||
}))
|
|
||||||
}), true);
|
|
||||||
for (let i = 0; i < files2.length; i++) {
|
|
||||||
const writable = import_writableStream.WritableStream.from(writableStreams[i]);
|
|
||||||
await platform.streamFile(files2[i], writable.stream());
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
directoryStream: rootDir,
|
|
||||||
streams: localDirectory ? void 0 : writableStreams
|
|
||||||
};
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
localPaths,
|
|
||||||
localDirectory
|
|
||||||
};
|
|
||||||
}
|
|
||||||
const payloads = items;
|
|
||||||
if (filePayloadExceedsSizeLimit(payloads))
|
|
||||||
throw new Error("Cannot set buffer larger than 50Mb, please write it to a file and pass its path instead.");
|
|
||||||
return { payloads };
|
|
||||||
}
|
|
||||||
function determineScreenshotType(options) {
|
|
||||||
if (options.path) {
|
|
||||||
const mimeType = (0, import_mimeType.getMimeTypeForPath)(options.path);
|
|
||||||
if (mimeType === "image/png")
|
|
||||||
return "png";
|
|
||||||
else if (mimeType === "image/jpeg")
|
|
||||||
return "jpeg";
|
|
||||||
throw new Error(`path: unsupported mime type "${mimeType}"`);
|
|
||||||
}
|
|
||||||
return options.type;
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
ElementHandle,
|
|
||||||
convertInputFiles,
|
|
||||||
convertSelectOptionValues,
|
|
||||||
determineScreenshotType
|
|
||||||
});
|
|
||||||
77
tvapp2/node_modules/playwright-core/lib/client/errors.js
generated
vendored
77
tvapp2/node_modules/playwright-core/lib/client/errors.js
generated
vendored
@@ -1,77 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var errors_exports = {};
|
|
||||||
__export(errors_exports, {
|
|
||||||
TargetClosedError: () => TargetClosedError,
|
|
||||||
TimeoutError: () => TimeoutError,
|
|
||||||
isTargetClosedError: () => isTargetClosedError,
|
|
||||||
parseError: () => parseError,
|
|
||||||
serializeError: () => serializeError
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(errors_exports);
|
|
||||||
var import_serializers = require("../protocol/serializers");
|
|
||||||
var import_rtti = require("../utils/isomorphic/rtti");
|
|
||||||
class TimeoutError extends Error {
|
|
||||||
constructor(message) {
|
|
||||||
super(message);
|
|
||||||
this.name = "TimeoutError";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
class TargetClosedError extends Error {
|
|
||||||
constructor(cause) {
|
|
||||||
super(cause || "Target page, context or browser has been closed");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function isTargetClosedError(error) {
|
|
||||||
return error instanceof TargetClosedError;
|
|
||||||
}
|
|
||||||
function serializeError(e) {
|
|
||||||
if ((0, import_rtti.isError)(e))
|
|
||||||
return { error: { message: e.message, stack: e.stack, name: e.name } };
|
|
||||||
return { value: (0, import_serializers.serializeValue)(e, (value) => ({ fallThrough: value })) };
|
|
||||||
}
|
|
||||||
function parseError(error) {
|
|
||||||
if (!error.error) {
|
|
||||||
if (error.value === void 0)
|
|
||||||
throw new Error("Serialized error must have either an error or a value");
|
|
||||||
return (0, import_serializers.parseSerializedValue)(error.value, void 0);
|
|
||||||
}
|
|
||||||
if (error.error.name === "TimeoutError") {
|
|
||||||
const e2 = new TimeoutError(error.error.message);
|
|
||||||
e2.stack = error.error.stack || "";
|
|
||||||
return e2;
|
|
||||||
}
|
|
||||||
if (error.error.name === "TargetClosedError") {
|
|
||||||
const e2 = new TargetClosedError(error.error.message);
|
|
||||||
e2.stack = error.error.stack || "";
|
|
||||||
return e2;
|
|
||||||
}
|
|
||||||
const e = new Error(error.error.message);
|
|
||||||
e.stack = error.error.stack || "";
|
|
||||||
e.name = error.error.name;
|
|
||||||
return e;
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
TargetClosedError,
|
|
||||||
TimeoutError,
|
|
||||||
isTargetClosedError,
|
|
||||||
parseError,
|
|
||||||
serializeError
|
|
||||||
});
|
|
||||||
314
tvapp2/node_modules/playwright-core/lib/client/eventEmitter.js
generated
vendored
314
tvapp2/node_modules/playwright-core/lib/client/eventEmitter.js
generated
vendored
@@ -1,314 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var eventEmitter_exports = {};
|
|
||||||
__export(eventEmitter_exports, {
|
|
||||||
EventEmitter: () => EventEmitter
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(eventEmitter_exports);
|
|
||||||
class EventEmitter {
|
|
||||||
constructor(platform) {
|
|
||||||
this._events = void 0;
|
|
||||||
this._eventsCount = 0;
|
|
||||||
this._maxListeners = void 0;
|
|
||||||
this._pendingHandlers = /* @__PURE__ */ new Map();
|
|
||||||
this._platform = platform;
|
|
||||||
if (this._events === void 0 || this._events === Object.getPrototypeOf(this)._events) {
|
|
||||||
this._events = /* @__PURE__ */ Object.create(null);
|
|
||||||
this._eventsCount = 0;
|
|
||||||
}
|
|
||||||
this._maxListeners = this._maxListeners || void 0;
|
|
||||||
this.on = this.addListener;
|
|
||||||
this.off = this.removeListener;
|
|
||||||
}
|
|
||||||
setMaxListeners(n) {
|
|
||||||
if (typeof n !== "number" || n < 0 || Number.isNaN(n))
|
|
||||||
throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + ".");
|
|
||||||
this._maxListeners = n;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
getMaxListeners() {
|
|
||||||
return this._maxListeners === void 0 ? this._platform.defaultMaxListeners() : this._maxListeners;
|
|
||||||
}
|
|
||||||
emit(type, ...args) {
|
|
||||||
const events = this._events;
|
|
||||||
if (events === void 0)
|
|
||||||
return false;
|
|
||||||
const handler = events?.[type];
|
|
||||||
if (handler === void 0)
|
|
||||||
return false;
|
|
||||||
if (typeof handler === "function") {
|
|
||||||
this._callHandler(type, handler, args);
|
|
||||||
} else {
|
|
||||||
const len = handler.length;
|
|
||||||
const listeners = handler.slice();
|
|
||||||
for (let i = 0; i < len; ++i)
|
|
||||||
this._callHandler(type, listeners[i], args);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
_callHandler(type, handler, args) {
|
|
||||||
const promise = Reflect.apply(handler, this, args);
|
|
||||||
if (!(promise instanceof Promise))
|
|
||||||
return;
|
|
||||||
let set = this._pendingHandlers.get(type);
|
|
||||||
if (!set) {
|
|
||||||
set = /* @__PURE__ */ new Set();
|
|
||||||
this._pendingHandlers.set(type, set);
|
|
||||||
}
|
|
||||||
set.add(promise);
|
|
||||||
promise.catch((e) => {
|
|
||||||
if (this._rejectionHandler)
|
|
||||||
this._rejectionHandler(e);
|
|
||||||
else
|
|
||||||
throw e;
|
|
||||||
}).finally(() => set.delete(promise));
|
|
||||||
}
|
|
||||||
addListener(type, listener) {
|
|
||||||
return this._addListener(type, listener, false);
|
|
||||||
}
|
|
||||||
on(type, listener) {
|
|
||||||
return this._addListener(type, listener, false);
|
|
||||||
}
|
|
||||||
_addListener(type, listener, prepend) {
|
|
||||||
checkListener(listener);
|
|
||||||
let events = this._events;
|
|
||||||
let existing;
|
|
||||||
if (events === void 0) {
|
|
||||||
events = this._events = /* @__PURE__ */ Object.create(null);
|
|
||||||
this._eventsCount = 0;
|
|
||||||
} else {
|
|
||||||
if (events.newListener !== void 0) {
|
|
||||||
this.emit("newListener", type, unwrapListener(listener));
|
|
||||||
events = this._events;
|
|
||||||
}
|
|
||||||
existing = events[type];
|
|
||||||
}
|
|
||||||
if (existing === void 0) {
|
|
||||||
existing = events[type] = listener;
|
|
||||||
++this._eventsCount;
|
|
||||||
} else {
|
|
||||||
if (typeof existing === "function") {
|
|
||||||
existing = events[type] = prepend ? [listener, existing] : [existing, listener];
|
|
||||||
} else if (prepend) {
|
|
||||||
existing.unshift(listener);
|
|
||||||
} else {
|
|
||||||
existing.push(listener);
|
|
||||||
}
|
|
||||||
const m = this.getMaxListeners();
|
|
||||||
if (m > 0 && existing.length > m && !existing.warned) {
|
|
||||||
existing.warned = true;
|
|
||||||
const w = new Error("Possible EventEmitter memory leak detected. " + existing.length + " " + String(type) + " listeners added. Use emitter.setMaxListeners() to increase limit");
|
|
||||||
w.name = "MaxListenersExceededWarning";
|
|
||||||
w.emitter = this;
|
|
||||||
w.type = type;
|
|
||||||
w.count = existing.length;
|
|
||||||
if (!this._platform.isUnderTest()) {
|
|
||||||
console.warn(w);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
prependListener(type, listener) {
|
|
||||||
return this._addListener(type, listener, true);
|
|
||||||
}
|
|
||||||
once(type, listener) {
|
|
||||||
checkListener(listener);
|
|
||||||
this.on(type, new OnceWrapper(this, type, listener).wrapperFunction);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
prependOnceListener(type, listener) {
|
|
||||||
checkListener(listener);
|
|
||||||
this.prependListener(type, new OnceWrapper(this, type, listener).wrapperFunction);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
removeListener(type, listener) {
|
|
||||||
checkListener(listener);
|
|
||||||
const events = this._events;
|
|
||||||
if (events === void 0)
|
|
||||||
return this;
|
|
||||||
const list = events[type];
|
|
||||||
if (list === void 0)
|
|
||||||
return this;
|
|
||||||
if (list === listener || list.listener === listener) {
|
|
||||||
if (--this._eventsCount === 0) {
|
|
||||||
this._events = /* @__PURE__ */ Object.create(null);
|
|
||||||
} else {
|
|
||||||
delete events[type];
|
|
||||||
if (events.removeListener)
|
|
||||||
this.emit("removeListener", type, list.listener ?? listener);
|
|
||||||
}
|
|
||||||
} else if (typeof list !== "function") {
|
|
||||||
let position = -1;
|
|
||||||
let originalListener;
|
|
||||||
for (let i = list.length - 1; i >= 0; i--) {
|
|
||||||
if (list[i] === listener || wrappedListener(list[i]) === listener) {
|
|
||||||
originalListener = wrappedListener(list[i]);
|
|
||||||
position = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (position < 0)
|
|
||||||
return this;
|
|
||||||
if (position === 0)
|
|
||||||
list.shift();
|
|
||||||
else
|
|
||||||
list.splice(position, 1);
|
|
||||||
if (list.length === 1)
|
|
||||||
events[type] = list[0];
|
|
||||||
if (events.removeListener !== void 0)
|
|
||||||
this.emit("removeListener", type, originalListener || listener);
|
|
||||||
}
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
off(type, listener) {
|
|
||||||
return this.removeListener(type, listener);
|
|
||||||
}
|
|
||||||
removeAllListeners(type, options) {
|
|
||||||
this._removeAllListeners(type);
|
|
||||||
if (!options)
|
|
||||||
return this;
|
|
||||||
if (options.behavior === "wait") {
|
|
||||||
const errors = [];
|
|
||||||
this._rejectionHandler = (error) => errors.push(error);
|
|
||||||
return this._waitFor(type).then(() => {
|
|
||||||
if (errors.length)
|
|
||||||
throw errors[0];
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (options.behavior === "ignoreErrors")
|
|
||||||
this._rejectionHandler = () => {
|
|
||||||
};
|
|
||||||
return Promise.resolve();
|
|
||||||
}
|
|
||||||
_removeAllListeners(type) {
|
|
||||||
const events = this._events;
|
|
||||||
if (!events)
|
|
||||||
return;
|
|
||||||
if (!events.removeListener) {
|
|
||||||
if (type === void 0) {
|
|
||||||
this._events = /* @__PURE__ */ Object.create(null);
|
|
||||||
this._eventsCount = 0;
|
|
||||||
} else if (events[type] !== void 0) {
|
|
||||||
if (--this._eventsCount === 0)
|
|
||||||
this._events = /* @__PURE__ */ Object.create(null);
|
|
||||||
else
|
|
||||||
delete events[type];
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (type === void 0) {
|
|
||||||
const keys = Object.keys(events);
|
|
||||||
let key;
|
|
||||||
for (let i = 0; i < keys.length; ++i) {
|
|
||||||
key = keys[i];
|
|
||||||
if (key === "removeListener")
|
|
||||||
continue;
|
|
||||||
this._removeAllListeners(key);
|
|
||||||
}
|
|
||||||
this._removeAllListeners("removeListener");
|
|
||||||
this._events = /* @__PURE__ */ Object.create(null);
|
|
||||||
this._eventsCount = 0;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const listeners = events[type];
|
|
||||||
if (typeof listeners === "function") {
|
|
||||||
this.removeListener(type, listeners);
|
|
||||||
} else if (listeners !== void 0) {
|
|
||||||
for (let i = listeners.length - 1; i >= 0; i--)
|
|
||||||
this.removeListener(type, listeners[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
listeners(type) {
|
|
||||||
return this._listeners(this, type, true);
|
|
||||||
}
|
|
||||||
rawListeners(type) {
|
|
||||||
return this._listeners(this, type, false);
|
|
||||||
}
|
|
||||||
listenerCount(type) {
|
|
||||||
const events = this._events;
|
|
||||||
if (events !== void 0) {
|
|
||||||
const listener = events[type];
|
|
||||||
if (typeof listener === "function")
|
|
||||||
return 1;
|
|
||||||
if (listener !== void 0)
|
|
||||||
return listener.length;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
eventNames() {
|
|
||||||
return this._eventsCount > 0 && this._events ? Reflect.ownKeys(this._events) : [];
|
|
||||||
}
|
|
||||||
async _waitFor(type) {
|
|
||||||
let promises = [];
|
|
||||||
if (type) {
|
|
||||||
promises = [...this._pendingHandlers.get(type) || []];
|
|
||||||
} else {
|
|
||||||
promises = [];
|
|
||||||
for (const [, pending] of this._pendingHandlers)
|
|
||||||
promises.push(...pending);
|
|
||||||
}
|
|
||||||
await Promise.all(promises);
|
|
||||||
}
|
|
||||||
_listeners(target, type, unwrap) {
|
|
||||||
const events = target._events;
|
|
||||||
if (events === void 0)
|
|
||||||
return [];
|
|
||||||
const listener = events[type];
|
|
||||||
if (listener === void 0)
|
|
||||||
return [];
|
|
||||||
if (typeof listener === "function")
|
|
||||||
return unwrap ? [unwrapListener(listener)] : [listener];
|
|
||||||
return unwrap ? unwrapListeners(listener) : listener.slice();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function checkListener(listener) {
|
|
||||||
if (typeof listener !== "function")
|
|
||||||
throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener);
|
|
||||||
}
|
|
||||||
class OnceWrapper {
|
|
||||||
constructor(eventEmitter, eventType, listener) {
|
|
||||||
this._fired = false;
|
|
||||||
this._eventEmitter = eventEmitter;
|
|
||||||
this._eventType = eventType;
|
|
||||||
this._listener = listener;
|
|
||||||
this.wrapperFunction = this._handle.bind(this);
|
|
||||||
this.wrapperFunction.listener = listener;
|
|
||||||
}
|
|
||||||
_handle(...args) {
|
|
||||||
if (this._fired)
|
|
||||||
return;
|
|
||||||
this._fired = true;
|
|
||||||
this._eventEmitter.removeListener(this._eventType, this.wrapperFunction);
|
|
||||||
return this._listener.apply(this._eventEmitter, args);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function unwrapListener(l) {
|
|
||||||
return wrappedListener(l) ?? l;
|
|
||||||
}
|
|
||||||
function unwrapListeners(arr) {
|
|
||||||
return arr.map((l) => wrappedListener(l) ?? l);
|
|
||||||
}
|
|
||||||
function wrappedListener(l) {
|
|
||||||
return l.listener;
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
EventEmitter
|
|
||||||
});
|
|
||||||
98
tvapp2/node_modules/playwright-core/lib/client/events.js
generated
vendored
98
tvapp2/node_modules/playwright-core/lib/client/events.js
generated
vendored
@@ -1,98 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var events_exports = {};
|
|
||||||
__export(events_exports, {
|
|
||||||
Events: () => Events
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(events_exports);
|
|
||||||
const Events = {
|
|
||||||
AndroidDevice: {
|
|
||||||
WebView: "webview",
|
|
||||||
Close: "close"
|
|
||||||
},
|
|
||||||
AndroidSocket: {
|
|
||||||
Data: "data",
|
|
||||||
Close: "close"
|
|
||||||
},
|
|
||||||
AndroidWebView: {
|
|
||||||
Close: "close"
|
|
||||||
},
|
|
||||||
Browser: {
|
|
||||||
Disconnected: "disconnected"
|
|
||||||
},
|
|
||||||
BrowserContext: {
|
|
||||||
Console: "console",
|
|
||||||
Close: "close",
|
|
||||||
Dialog: "dialog",
|
|
||||||
Page: "page",
|
|
||||||
// Can't use just 'error' due to node.js special treatment of error events.
|
|
||||||
// @see https://nodejs.org/api/events.html#events_error_events
|
|
||||||
WebError: "weberror",
|
|
||||||
BackgroundPage: "backgroundpage",
|
|
||||||
ServiceWorker: "serviceworker",
|
|
||||||
Request: "request",
|
|
||||||
Response: "response",
|
|
||||||
RequestFailed: "requestfailed",
|
|
||||||
RequestFinished: "requestfinished"
|
|
||||||
},
|
|
||||||
BrowserServer: {
|
|
||||||
Close: "close"
|
|
||||||
},
|
|
||||||
Page: {
|
|
||||||
Close: "close",
|
|
||||||
Crash: "crash",
|
|
||||||
Console: "console",
|
|
||||||
Dialog: "dialog",
|
|
||||||
Download: "download",
|
|
||||||
FileChooser: "filechooser",
|
|
||||||
DOMContentLoaded: "domcontentloaded",
|
|
||||||
// Can't use just 'error' due to node.js special treatment of error events.
|
|
||||||
// @see https://nodejs.org/api/events.html#events_error_events
|
|
||||||
PageError: "pageerror",
|
|
||||||
Request: "request",
|
|
||||||
Response: "response",
|
|
||||||
RequestFailed: "requestfailed",
|
|
||||||
RequestFinished: "requestfinished",
|
|
||||||
FrameAttached: "frameattached",
|
|
||||||
FrameDetached: "framedetached",
|
|
||||||
FrameNavigated: "framenavigated",
|
|
||||||
Load: "load",
|
|
||||||
Popup: "popup",
|
|
||||||
WebSocket: "websocket",
|
|
||||||
Worker: "worker"
|
|
||||||
},
|
|
||||||
WebSocket: {
|
|
||||||
Close: "close",
|
|
||||||
Error: "socketerror",
|
|
||||||
FrameReceived: "framereceived",
|
|
||||||
FrameSent: "framesent"
|
|
||||||
},
|
|
||||||
Worker: {
|
|
||||||
Close: "close"
|
|
||||||
},
|
|
||||||
ElectronApplication: {
|
|
||||||
Close: "close",
|
|
||||||
Console: "console",
|
|
||||||
Window: "window"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
Events
|
|
||||||
});
|
|
||||||
367
tvapp2/node_modules/playwright-core/lib/client/fetch.js
generated
vendored
367
tvapp2/node_modules/playwright-core/lib/client/fetch.js
generated
vendored
@@ -1,367 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var fetch_exports = {};
|
|
||||||
__export(fetch_exports, {
|
|
||||||
APIRequest: () => APIRequest,
|
|
||||||
APIRequestContext: () => APIRequestContext,
|
|
||||||
APIResponse: () => APIResponse
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(fetch_exports);
|
|
||||||
var import_browserContext = require("./browserContext");
|
|
||||||
var import_channelOwner = require("./channelOwner");
|
|
||||||
var import_errors = require("./errors");
|
|
||||||
var import_network = require("./network");
|
|
||||||
var import_tracing = require("./tracing");
|
|
||||||
var import_assert = require("../utils/isomorphic/assert");
|
|
||||||
var import_fileUtils = require("./fileUtils");
|
|
||||||
var import_headers = require("../utils/isomorphic/headers");
|
|
||||||
var import_rtti = require("../utils/isomorphic/rtti");
|
|
||||||
class APIRequest {
|
|
||||||
constructor(playwright) {
|
|
||||||
this._contexts = /* @__PURE__ */ new Set();
|
|
||||||
this._playwright = playwright;
|
|
||||||
}
|
|
||||||
async newContext(options = {}) {
|
|
||||||
options = {
|
|
||||||
...this._playwright._defaultContextOptions,
|
|
||||||
timeout: this._playwright._defaultContextTimeout,
|
|
||||||
...options
|
|
||||||
};
|
|
||||||
const storageState = typeof options.storageState === "string" ? JSON.parse(await this._playwright._platform.fs().promises.readFile(options.storageState, "utf8")) : options.storageState;
|
|
||||||
const context = APIRequestContext.from((await this._playwright._channel.newRequest({
|
|
||||||
...options,
|
|
||||||
extraHTTPHeaders: options.extraHTTPHeaders ? (0, import_headers.headersObjectToArray)(options.extraHTTPHeaders) : void 0,
|
|
||||||
storageState,
|
|
||||||
tracesDir: this._playwright._defaultLaunchOptions?.tracesDir,
|
|
||||||
// We do not expose tracesDir in the API, so do not allow options to accidentally override it.
|
|
||||||
clientCertificates: await (0, import_browserContext.toClientCertificatesProtocol)(this._playwright._platform, options.clientCertificates)
|
|
||||||
})).request);
|
|
||||||
this._contexts.add(context);
|
|
||||||
context._request = this;
|
|
||||||
context._tracing._tracesDir = this._playwright._defaultLaunchOptions?.tracesDir;
|
|
||||||
await context._instrumentation.runAfterCreateRequestContext(context);
|
|
||||||
return context;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
class APIRequestContext extends import_channelOwner.ChannelOwner {
|
|
||||||
static from(channel) {
|
|
||||||
return channel._object;
|
|
||||||
}
|
|
||||||
constructor(parent, type, guid, initializer) {
|
|
||||||
super(parent, type, guid, initializer);
|
|
||||||
this._tracing = import_tracing.Tracing.from(initializer.tracing);
|
|
||||||
}
|
|
||||||
async [Symbol.asyncDispose]() {
|
|
||||||
await this.dispose();
|
|
||||||
}
|
|
||||||
async dispose(options = {}) {
|
|
||||||
this._closeReason = options.reason;
|
|
||||||
await this._instrumentation.runBeforeCloseRequestContext(this);
|
|
||||||
try {
|
|
||||||
await this._channel.dispose(options);
|
|
||||||
} catch (e) {
|
|
||||||
if ((0, import_errors.isTargetClosedError)(e))
|
|
||||||
return;
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
this._tracing._resetStackCounter();
|
|
||||||
this._request?._contexts.delete(this);
|
|
||||||
}
|
|
||||||
async delete(url, options) {
|
|
||||||
return await this.fetch(url, {
|
|
||||||
...options,
|
|
||||||
method: "DELETE"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async head(url, options) {
|
|
||||||
return await this.fetch(url, {
|
|
||||||
...options,
|
|
||||||
method: "HEAD"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async get(url, options) {
|
|
||||||
return await this.fetch(url, {
|
|
||||||
...options,
|
|
||||||
method: "GET"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async patch(url, options) {
|
|
||||||
return await this.fetch(url, {
|
|
||||||
...options,
|
|
||||||
method: "PATCH"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async post(url, options) {
|
|
||||||
return await this.fetch(url, {
|
|
||||||
...options,
|
|
||||||
method: "POST"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async put(url, options) {
|
|
||||||
return await this.fetch(url, {
|
|
||||||
...options,
|
|
||||||
method: "PUT"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async fetch(urlOrRequest, options = {}) {
|
|
||||||
const url = (0, import_rtti.isString)(urlOrRequest) ? urlOrRequest : void 0;
|
|
||||||
const request = (0, import_rtti.isString)(urlOrRequest) ? void 0 : urlOrRequest;
|
|
||||||
return await this._innerFetch({ url, request, ...options });
|
|
||||||
}
|
|
||||||
async _innerFetch(options = {}) {
|
|
||||||
return await this._wrapApiCall(async () => {
|
|
||||||
if (this._closeReason)
|
|
||||||
throw new import_errors.TargetClosedError(this._closeReason);
|
|
||||||
(0, import_assert.assert)(options.request || typeof options.url === "string", "First argument must be either URL string or Request");
|
|
||||||
(0, import_assert.assert)((options.data === void 0 ? 0 : 1) + (options.form === void 0 ? 0 : 1) + (options.multipart === void 0 ? 0 : 1) <= 1, `Only one of 'data', 'form' or 'multipart' can be specified`);
|
|
||||||
(0, import_assert.assert)(options.maxRedirects === void 0 || options.maxRedirects >= 0, `'maxRedirects' must be greater than or equal to '0'`);
|
|
||||||
(0, import_assert.assert)(options.maxRetries === void 0 || options.maxRetries >= 0, `'maxRetries' must be greater than or equal to '0'`);
|
|
||||||
const url = options.url !== void 0 ? options.url : options.request.url();
|
|
||||||
const method = options.method || options.request?.method();
|
|
||||||
let encodedParams = void 0;
|
|
||||||
if (typeof options.params === "string")
|
|
||||||
encodedParams = options.params;
|
|
||||||
else if (options.params instanceof URLSearchParams)
|
|
||||||
encodedParams = options.params.toString();
|
|
||||||
const headersObj = options.headers || options.request?.headers();
|
|
||||||
const headers = headersObj ? (0, import_headers.headersObjectToArray)(headersObj) : void 0;
|
|
||||||
let jsonData;
|
|
||||||
let formData;
|
|
||||||
let multipartData;
|
|
||||||
let postDataBuffer;
|
|
||||||
if (options.data !== void 0) {
|
|
||||||
if ((0, import_rtti.isString)(options.data)) {
|
|
||||||
if (isJsonContentType(headers))
|
|
||||||
jsonData = isJsonParsable(options.data) ? options.data : JSON.stringify(options.data);
|
|
||||||
else
|
|
||||||
postDataBuffer = Buffer.from(options.data, "utf8");
|
|
||||||
} else if (Buffer.isBuffer(options.data)) {
|
|
||||||
postDataBuffer = options.data;
|
|
||||||
} else if (typeof options.data === "object" || typeof options.data === "number" || typeof options.data === "boolean") {
|
|
||||||
jsonData = JSON.stringify(options.data);
|
|
||||||
} else {
|
|
||||||
throw new Error(`Unexpected 'data' type`);
|
|
||||||
}
|
|
||||||
} else if (options.form) {
|
|
||||||
if (globalThis.FormData && options.form instanceof FormData) {
|
|
||||||
formData = [];
|
|
||||||
for (const [name, value] of options.form.entries()) {
|
|
||||||
if (typeof value !== "string")
|
|
||||||
throw new Error(`Expected string for options.form["${name}"], found File. Please use options.multipart instead.`);
|
|
||||||
formData.push({ name, value });
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
formData = objectToArray(options.form);
|
|
||||||
}
|
|
||||||
} else if (options.multipart) {
|
|
||||||
multipartData = [];
|
|
||||||
if (globalThis.FormData && options.multipart instanceof FormData) {
|
|
||||||
const form = options.multipart;
|
|
||||||
for (const [name, value] of form.entries()) {
|
|
||||||
if ((0, import_rtti.isString)(value)) {
|
|
||||||
multipartData.push({ name, value });
|
|
||||||
} else {
|
|
||||||
const file = {
|
|
||||||
name: value.name,
|
|
||||||
mimeType: value.type,
|
|
||||||
buffer: Buffer.from(await value.arrayBuffer())
|
|
||||||
};
|
|
||||||
multipartData.push({ name, file });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (const [name, value] of Object.entries(options.multipart))
|
|
||||||
multipartData.push(await toFormField(this._platform, name, value));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (postDataBuffer === void 0 && jsonData === void 0 && formData === void 0 && multipartData === void 0)
|
|
||||||
postDataBuffer = options.request?.postDataBuffer() || void 0;
|
|
||||||
const fixtures = {
|
|
||||||
__testHookLookup: options.__testHookLookup
|
|
||||||
};
|
|
||||||
const result = await this._channel.fetch({
|
|
||||||
url,
|
|
||||||
params: typeof options.params === "object" ? objectToArray(options.params) : void 0,
|
|
||||||
encodedParams,
|
|
||||||
method,
|
|
||||||
headers,
|
|
||||||
postData: postDataBuffer,
|
|
||||||
jsonData,
|
|
||||||
formData,
|
|
||||||
multipartData,
|
|
||||||
timeout: options.timeout,
|
|
||||||
failOnStatusCode: options.failOnStatusCode,
|
|
||||||
ignoreHTTPSErrors: options.ignoreHTTPSErrors,
|
|
||||||
maxRedirects: options.maxRedirects,
|
|
||||||
maxRetries: options.maxRetries,
|
|
||||||
...fixtures
|
|
||||||
});
|
|
||||||
return new APIResponse(this, result.response);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async storageState(options = {}) {
|
|
||||||
const state = await this._channel.storageState({ indexedDB: options.indexedDB });
|
|
||||||
if (options.path) {
|
|
||||||
await (0, import_fileUtils.mkdirIfNeeded)(this._platform, options.path);
|
|
||||||
await this._platform.fs().promises.writeFile(options.path, JSON.stringify(state, void 0, 2), "utf8");
|
|
||||||
}
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
async function toFormField(platform, name, value) {
|
|
||||||
const typeOfValue = typeof value;
|
|
||||||
if (isFilePayload(value)) {
|
|
||||||
const payload = value;
|
|
||||||
if (!Buffer.isBuffer(payload.buffer))
|
|
||||||
throw new Error(`Unexpected buffer type of 'data.${name}'`);
|
|
||||||
return { name, file: filePayloadToJson(payload) };
|
|
||||||
} else if (typeOfValue === "string" || typeOfValue === "number" || typeOfValue === "boolean") {
|
|
||||||
return { name, value: String(value) };
|
|
||||||
} else {
|
|
||||||
return { name, file: await readStreamToJson(platform, value) };
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function isJsonParsable(value) {
|
|
||||||
if (typeof value !== "string")
|
|
||||||
return false;
|
|
||||||
try {
|
|
||||||
JSON.parse(value);
|
|
||||||
return true;
|
|
||||||
} catch (e) {
|
|
||||||
if (e instanceof SyntaxError)
|
|
||||||
return false;
|
|
||||||
else
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
class APIResponse {
|
|
||||||
constructor(context, initializer) {
|
|
||||||
this._request = context;
|
|
||||||
this._initializer = initializer;
|
|
||||||
this._headers = new import_network.RawHeaders(this._initializer.headers);
|
|
||||||
if (context._platform.inspectCustom)
|
|
||||||
this[context._platform.inspectCustom] = () => this._inspect();
|
|
||||||
}
|
|
||||||
ok() {
|
|
||||||
return this._initializer.status >= 200 && this._initializer.status <= 299;
|
|
||||||
}
|
|
||||||
url() {
|
|
||||||
return this._initializer.url;
|
|
||||||
}
|
|
||||||
status() {
|
|
||||||
return this._initializer.status;
|
|
||||||
}
|
|
||||||
statusText() {
|
|
||||||
return this._initializer.statusText;
|
|
||||||
}
|
|
||||||
headers() {
|
|
||||||
return this._headers.headers();
|
|
||||||
}
|
|
||||||
headersArray() {
|
|
||||||
return this._headers.headersArray();
|
|
||||||
}
|
|
||||||
async body() {
|
|
||||||
return await this._request._wrapApiCall(async () => {
|
|
||||||
try {
|
|
||||||
const result = await this._request._channel.fetchResponseBody({ fetchUid: this._fetchUid() });
|
|
||||||
if (result.binary === void 0)
|
|
||||||
throw new Error("Response has been disposed");
|
|
||||||
return result.binary;
|
|
||||||
} catch (e) {
|
|
||||||
if ((0, import_errors.isTargetClosedError)(e))
|
|
||||||
throw new Error("Response has been disposed");
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}, true);
|
|
||||||
}
|
|
||||||
async text() {
|
|
||||||
const content = await this.body();
|
|
||||||
return content.toString("utf8");
|
|
||||||
}
|
|
||||||
async json() {
|
|
||||||
const content = await this.text();
|
|
||||||
return JSON.parse(content);
|
|
||||||
}
|
|
||||||
async [Symbol.asyncDispose]() {
|
|
||||||
await this.dispose();
|
|
||||||
}
|
|
||||||
async dispose() {
|
|
||||||
await this._request._channel.disposeAPIResponse({ fetchUid: this._fetchUid() });
|
|
||||||
}
|
|
||||||
_inspect() {
|
|
||||||
const headers = this.headersArray().map(({ name, value }) => ` ${name}: ${value}`);
|
|
||||||
return `APIResponse: ${this.status()} ${this.statusText()}
|
|
||||||
${headers.join("\n")}`;
|
|
||||||
}
|
|
||||||
_fetchUid() {
|
|
||||||
return this._initializer.fetchUid;
|
|
||||||
}
|
|
||||||
async _fetchLog() {
|
|
||||||
const { log } = await this._request._channel.fetchLog({ fetchUid: this._fetchUid() });
|
|
||||||
return log;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function filePayloadToJson(payload) {
|
|
||||||
return {
|
|
||||||
name: payload.name,
|
|
||||||
mimeType: payload.mimeType,
|
|
||||||
buffer: payload.buffer
|
|
||||||
};
|
|
||||||
}
|
|
||||||
async function readStreamToJson(platform, stream) {
|
|
||||||
const buffer = await new Promise((resolve, reject) => {
|
|
||||||
const chunks = [];
|
|
||||||
stream.on("data", (chunk) => chunks.push(chunk));
|
|
||||||
stream.on("end", () => resolve(Buffer.concat(chunks)));
|
|
||||||
stream.on("error", (err) => reject(err));
|
|
||||||
});
|
|
||||||
const streamPath = Buffer.isBuffer(stream.path) ? stream.path.toString("utf8") : stream.path;
|
|
||||||
return {
|
|
||||||
name: platform.path().basename(streamPath),
|
|
||||||
buffer
|
|
||||||
};
|
|
||||||
}
|
|
||||||
function isJsonContentType(headers) {
|
|
||||||
if (!headers)
|
|
||||||
return false;
|
|
||||||
for (const { name, value } of headers) {
|
|
||||||
if (name.toLocaleLowerCase() === "content-type")
|
|
||||||
return value === "application/json";
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
function objectToArray(map) {
|
|
||||||
if (!map)
|
|
||||||
return void 0;
|
|
||||||
const result = [];
|
|
||||||
for (const [name, value] of Object.entries(map)) {
|
|
||||||
if (value !== void 0)
|
|
||||||
result.push({ name, value: String(value) });
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
function isFilePayload(value) {
|
|
||||||
return typeof value === "object" && value["name"] && value["mimeType"] && value["buffer"];
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
APIRequest,
|
|
||||||
APIRequestContext,
|
|
||||||
APIResponse
|
|
||||||
});
|
|
||||||
46
tvapp2/node_modules/playwright-core/lib/client/fileChooser.js
generated
vendored
46
tvapp2/node_modules/playwright-core/lib/client/fileChooser.js
generated
vendored
@@ -1,46 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var fileChooser_exports = {};
|
|
||||||
__export(fileChooser_exports, {
|
|
||||||
FileChooser: () => FileChooser
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(fileChooser_exports);
|
|
||||||
class FileChooser {
|
|
||||||
constructor(page, elementHandle, isMultiple) {
|
|
||||||
this._page = page;
|
|
||||||
this._elementHandle = elementHandle;
|
|
||||||
this._isMultiple = isMultiple;
|
|
||||||
}
|
|
||||||
element() {
|
|
||||||
return this._elementHandle;
|
|
||||||
}
|
|
||||||
isMultiple() {
|
|
||||||
return this._isMultiple;
|
|
||||||
}
|
|
||||||
page() {
|
|
||||||
return this._page;
|
|
||||||
}
|
|
||||||
async setFiles(files, options) {
|
|
||||||
return await this._elementHandle.setInputFiles(files, options);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
FileChooser
|
|
||||||
});
|
|
||||||
386
tvapp2/node_modules/playwright-core/lib/client/frame.js
generated
vendored
386
tvapp2/node_modules/playwright-core/lib/client/frame.js
generated
vendored
@@ -1,386 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __create = Object.create;
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __getProtoOf = Object.getPrototypeOf;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
||||||
// If the importer is in node compatibility mode or this is not an ESM
|
|
||||||
// file that has been converted to a CommonJS file using a Babel-
|
|
||||||
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
||||||
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
||||||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
||||||
mod
|
|
||||||
));
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var frame_exports = {};
|
|
||||||
__export(frame_exports, {
|
|
||||||
Frame: () => Frame,
|
|
||||||
verifyLoadState: () => verifyLoadState
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(frame_exports);
|
|
||||||
var import_eventEmitter = require("./eventEmitter");
|
|
||||||
var import_channelOwner = require("./channelOwner");
|
|
||||||
var import_clientHelper = require("./clientHelper");
|
|
||||||
var import_elementHandle = require("./elementHandle");
|
|
||||||
var import_events = require("./events");
|
|
||||||
var import_jsHandle = require("./jsHandle");
|
|
||||||
var import_locator = require("./locator");
|
|
||||||
var network = __toESM(require("./network"));
|
|
||||||
var import_types = require("./types");
|
|
||||||
var import_waiter = require("./waiter");
|
|
||||||
var import_assert = require("../utils/isomorphic/assert");
|
|
||||||
var import_locatorUtils = require("../utils/isomorphic/locatorUtils");
|
|
||||||
var import_urlMatch = require("../utils/isomorphic/urlMatch");
|
|
||||||
class Frame extends import_channelOwner.ChannelOwner {
|
|
||||||
constructor(parent, type, guid, initializer) {
|
|
||||||
super(parent, type, guid, initializer);
|
|
||||||
this._parentFrame = null;
|
|
||||||
this._url = "";
|
|
||||||
this._name = "";
|
|
||||||
this._detached = false;
|
|
||||||
this._childFrames = /* @__PURE__ */ new Set();
|
|
||||||
this._eventEmitter = new import_eventEmitter.EventEmitter(parent._platform);
|
|
||||||
this._eventEmitter.setMaxListeners(0);
|
|
||||||
this._parentFrame = Frame.fromNullable(initializer.parentFrame);
|
|
||||||
if (this._parentFrame)
|
|
||||||
this._parentFrame._childFrames.add(this);
|
|
||||||
this._name = initializer.name;
|
|
||||||
this._url = initializer.url;
|
|
||||||
this._loadStates = new Set(initializer.loadStates);
|
|
||||||
this._channel.on("loadstate", (event) => {
|
|
||||||
if (event.add) {
|
|
||||||
this._loadStates.add(event.add);
|
|
||||||
this._eventEmitter.emit("loadstate", event.add);
|
|
||||||
}
|
|
||||||
if (event.remove)
|
|
||||||
this._loadStates.delete(event.remove);
|
|
||||||
if (!this._parentFrame && event.add === "load" && this._page)
|
|
||||||
this._page.emit(import_events.Events.Page.Load, this._page);
|
|
||||||
if (!this._parentFrame && event.add === "domcontentloaded" && this._page)
|
|
||||||
this._page.emit(import_events.Events.Page.DOMContentLoaded, this._page);
|
|
||||||
});
|
|
||||||
this._channel.on("navigated", (event) => {
|
|
||||||
this._url = event.url;
|
|
||||||
this._name = event.name;
|
|
||||||
this._eventEmitter.emit("navigated", event);
|
|
||||||
if (!event.error && this._page)
|
|
||||||
this._page.emit(import_events.Events.Page.FrameNavigated, this);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
static from(frame) {
|
|
||||||
return frame._object;
|
|
||||||
}
|
|
||||||
static fromNullable(frame) {
|
|
||||||
return frame ? Frame.from(frame) : null;
|
|
||||||
}
|
|
||||||
page() {
|
|
||||||
return this._page;
|
|
||||||
}
|
|
||||||
async goto(url, options = {}) {
|
|
||||||
const waitUntil = verifyLoadState("waitUntil", options.waitUntil === void 0 ? "load" : options.waitUntil);
|
|
||||||
return network.Response.fromNullable((await this._channel.goto({ url, ...options, waitUntil })).response);
|
|
||||||
}
|
|
||||||
_setupNavigationWaiter(options) {
|
|
||||||
const waiter = new import_waiter.Waiter(this._page, "");
|
|
||||||
if (this._page.isClosed())
|
|
||||||
waiter.rejectImmediately(this._page._closeErrorWithReason());
|
|
||||||
waiter.rejectOnEvent(this._page, import_events.Events.Page.Close, () => this._page._closeErrorWithReason());
|
|
||||||
waiter.rejectOnEvent(this._page, import_events.Events.Page.Crash, new Error("Navigation failed because page crashed!"));
|
|
||||||
waiter.rejectOnEvent(this._page, import_events.Events.Page.FrameDetached, new Error("Navigating frame was detached!"), (frame) => frame === this);
|
|
||||||
const timeout = this._page._timeoutSettings.navigationTimeout(options);
|
|
||||||
waiter.rejectOnTimeout(timeout, `Timeout ${timeout}ms exceeded.`);
|
|
||||||
return waiter;
|
|
||||||
}
|
|
||||||
async waitForNavigation(options = {}) {
|
|
||||||
return await this._page._wrapApiCall(async () => {
|
|
||||||
const waitUntil = verifyLoadState("waitUntil", options.waitUntil === void 0 ? "load" : options.waitUntil);
|
|
||||||
const waiter = this._setupNavigationWaiter(options);
|
|
||||||
const toUrl = typeof options.url === "string" ? ` to "${options.url}"` : "";
|
|
||||||
waiter.log(`waiting for navigation${toUrl} until "${waitUntil}"`);
|
|
||||||
const navigatedEvent = await waiter.waitForEvent(this._eventEmitter, "navigated", (event) => {
|
|
||||||
if (event.error)
|
|
||||||
return true;
|
|
||||||
waiter.log(` navigated to "${event.url}"`);
|
|
||||||
return (0, import_urlMatch.urlMatches)(this._page?.context()._options.baseURL, event.url, options.url);
|
|
||||||
});
|
|
||||||
if (navigatedEvent.error) {
|
|
||||||
const e = new Error(navigatedEvent.error);
|
|
||||||
e.stack = "";
|
|
||||||
await waiter.waitForPromise(Promise.reject(e));
|
|
||||||
}
|
|
||||||
if (!this._loadStates.has(waitUntil)) {
|
|
||||||
await waiter.waitForEvent(this._eventEmitter, "loadstate", (s) => {
|
|
||||||
waiter.log(` "${s}" event fired`);
|
|
||||||
return s === waitUntil;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
const request = navigatedEvent.newDocument ? network.Request.fromNullable(navigatedEvent.newDocument.request) : null;
|
|
||||||
const response = request ? await waiter.waitForPromise(request._finalRequest()._internalResponse()) : null;
|
|
||||||
waiter.dispose();
|
|
||||||
return response;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async waitForLoadState(state = "load", options = {}) {
|
|
||||||
state = verifyLoadState("state", state);
|
|
||||||
return await this._page._wrapApiCall(async () => {
|
|
||||||
const waiter = this._setupNavigationWaiter(options);
|
|
||||||
if (this._loadStates.has(state)) {
|
|
||||||
waiter.log(` not waiting, "${state}" event already fired`);
|
|
||||||
} else {
|
|
||||||
await waiter.waitForEvent(this._eventEmitter, "loadstate", (s) => {
|
|
||||||
waiter.log(` "${s}" event fired`);
|
|
||||||
return s === state;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
waiter.dispose();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async waitForURL(url, options = {}) {
|
|
||||||
if ((0, import_urlMatch.urlMatches)(this._page?.context()._options.baseURL, this.url(), url))
|
|
||||||
return await this.waitForLoadState(options.waitUntil, options);
|
|
||||||
await this.waitForNavigation({ url, ...options });
|
|
||||||
}
|
|
||||||
async frameElement() {
|
|
||||||
return import_elementHandle.ElementHandle.from((await this._channel.frameElement()).element);
|
|
||||||
}
|
|
||||||
async evaluateHandle(pageFunction, arg) {
|
|
||||||
(0, import_jsHandle.assertMaxArguments)(arguments.length, 2);
|
|
||||||
const result = await this._channel.evaluateExpressionHandle({ expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: (0, import_jsHandle.serializeArgument)(arg) });
|
|
||||||
return import_jsHandle.JSHandle.from(result.handle);
|
|
||||||
}
|
|
||||||
async evaluate(pageFunction, arg) {
|
|
||||||
(0, import_jsHandle.assertMaxArguments)(arguments.length, 2);
|
|
||||||
const result = await this._channel.evaluateExpression({ expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: (0, import_jsHandle.serializeArgument)(arg) });
|
|
||||||
return (0, import_jsHandle.parseResult)(result.value);
|
|
||||||
}
|
|
||||||
async _evaluateExposeUtilityScript(pageFunction, arg) {
|
|
||||||
(0, import_jsHandle.assertMaxArguments)(arguments.length, 2);
|
|
||||||
const result = await this._channel.evaluateExpression({ expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: (0, import_jsHandle.serializeArgument)(arg) });
|
|
||||||
return (0, import_jsHandle.parseResult)(result.value);
|
|
||||||
}
|
|
||||||
async $(selector, options) {
|
|
||||||
const result = await this._channel.querySelector({ selector, ...options });
|
|
||||||
return import_elementHandle.ElementHandle.fromNullable(result.element);
|
|
||||||
}
|
|
||||||
async waitForSelector(selector, options = {}) {
|
|
||||||
if (options.visibility)
|
|
||||||
throw new Error("options.visibility is not supported, did you mean options.state?");
|
|
||||||
if (options.waitFor && options.waitFor !== "visible")
|
|
||||||
throw new Error("options.waitFor is not supported, did you mean options.state?");
|
|
||||||
const result = await this._channel.waitForSelector({ selector, ...options });
|
|
||||||
return import_elementHandle.ElementHandle.fromNullable(result.element);
|
|
||||||
}
|
|
||||||
async dispatchEvent(selector, type, eventInit, options = {}) {
|
|
||||||
await this._channel.dispatchEvent({ selector, type, eventInit: (0, import_jsHandle.serializeArgument)(eventInit), ...options });
|
|
||||||
}
|
|
||||||
async $eval(selector, pageFunction, arg) {
|
|
||||||
(0, import_jsHandle.assertMaxArguments)(arguments.length, 3);
|
|
||||||
const result = await this._channel.evalOnSelector({ selector, expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: (0, import_jsHandle.serializeArgument)(arg) });
|
|
||||||
return (0, import_jsHandle.parseResult)(result.value);
|
|
||||||
}
|
|
||||||
async $$eval(selector, pageFunction, arg) {
|
|
||||||
(0, import_jsHandle.assertMaxArguments)(arguments.length, 3);
|
|
||||||
const result = await this._channel.evalOnSelectorAll({ selector, expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: (0, import_jsHandle.serializeArgument)(arg) });
|
|
||||||
return (0, import_jsHandle.parseResult)(result.value);
|
|
||||||
}
|
|
||||||
async $$(selector) {
|
|
||||||
const result = await this._channel.querySelectorAll({ selector });
|
|
||||||
return result.elements.map((e) => import_elementHandle.ElementHandle.from(e));
|
|
||||||
}
|
|
||||||
async _queryCount(selector) {
|
|
||||||
return (await this._channel.queryCount({ selector })).value;
|
|
||||||
}
|
|
||||||
async content() {
|
|
||||||
return (await this._channel.content()).value;
|
|
||||||
}
|
|
||||||
async setContent(html, options = {}) {
|
|
||||||
const waitUntil = verifyLoadState("waitUntil", options.waitUntil === void 0 ? "load" : options.waitUntil);
|
|
||||||
await this._channel.setContent({ html, ...options, waitUntil });
|
|
||||||
}
|
|
||||||
name() {
|
|
||||||
return this._name || "";
|
|
||||||
}
|
|
||||||
url() {
|
|
||||||
return this._url;
|
|
||||||
}
|
|
||||||
parentFrame() {
|
|
||||||
return this._parentFrame;
|
|
||||||
}
|
|
||||||
childFrames() {
|
|
||||||
return Array.from(this._childFrames);
|
|
||||||
}
|
|
||||||
isDetached() {
|
|
||||||
return this._detached;
|
|
||||||
}
|
|
||||||
async addScriptTag(options = {}) {
|
|
||||||
const copy = { ...options };
|
|
||||||
if (copy.path) {
|
|
||||||
copy.content = (await this._platform.fs().promises.readFile(copy.path)).toString();
|
|
||||||
copy.content = (0, import_clientHelper.addSourceUrlToScript)(copy.content, copy.path);
|
|
||||||
}
|
|
||||||
return import_elementHandle.ElementHandle.from((await this._channel.addScriptTag({ ...copy })).element);
|
|
||||||
}
|
|
||||||
async addStyleTag(options = {}) {
|
|
||||||
const copy = { ...options };
|
|
||||||
if (copy.path) {
|
|
||||||
copy.content = (await this._platform.fs().promises.readFile(copy.path)).toString();
|
|
||||||
copy.content += "/*# sourceURL=" + copy.path.replace(/\n/g, "") + "*/";
|
|
||||||
}
|
|
||||||
return import_elementHandle.ElementHandle.from((await this._channel.addStyleTag({ ...copy })).element);
|
|
||||||
}
|
|
||||||
async click(selector, options = {}) {
|
|
||||||
return await this._channel.click({ selector, ...options });
|
|
||||||
}
|
|
||||||
async dblclick(selector, options = {}) {
|
|
||||||
return await this._channel.dblclick({ selector, ...options });
|
|
||||||
}
|
|
||||||
async dragAndDrop(source, target, options = {}) {
|
|
||||||
return await this._channel.dragAndDrop({ source, target, ...options });
|
|
||||||
}
|
|
||||||
async tap(selector, options = {}) {
|
|
||||||
return await this._channel.tap({ selector, ...options });
|
|
||||||
}
|
|
||||||
async fill(selector, value, options = {}) {
|
|
||||||
return await this._channel.fill({ selector, value, ...options });
|
|
||||||
}
|
|
||||||
async _highlight(selector) {
|
|
||||||
return await this._channel.highlight({ selector });
|
|
||||||
}
|
|
||||||
locator(selector, options) {
|
|
||||||
return new import_locator.Locator(this, selector, options);
|
|
||||||
}
|
|
||||||
getByTestId(testId) {
|
|
||||||
return this.locator((0, import_locatorUtils.getByTestIdSelector)((0, import_locator.testIdAttributeName)(), testId));
|
|
||||||
}
|
|
||||||
getByAltText(text, options) {
|
|
||||||
return this.locator((0, import_locatorUtils.getByAltTextSelector)(text, options));
|
|
||||||
}
|
|
||||||
getByLabel(text, options) {
|
|
||||||
return this.locator((0, import_locatorUtils.getByLabelSelector)(text, options));
|
|
||||||
}
|
|
||||||
getByPlaceholder(text, options) {
|
|
||||||
return this.locator((0, import_locatorUtils.getByPlaceholderSelector)(text, options));
|
|
||||||
}
|
|
||||||
getByText(text, options) {
|
|
||||||
return this.locator((0, import_locatorUtils.getByTextSelector)(text, options));
|
|
||||||
}
|
|
||||||
getByTitle(text, options) {
|
|
||||||
return this.locator((0, import_locatorUtils.getByTitleSelector)(text, options));
|
|
||||||
}
|
|
||||||
getByRole(role, options = {}) {
|
|
||||||
return this.locator((0, import_locatorUtils.getByRoleSelector)(role, options));
|
|
||||||
}
|
|
||||||
frameLocator(selector) {
|
|
||||||
return new import_locator.FrameLocator(this, selector);
|
|
||||||
}
|
|
||||||
async focus(selector, options = {}) {
|
|
||||||
await this._channel.focus({ selector, ...options });
|
|
||||||
}
|
|
||||||
async textContent(selector, options = {}) {
|
|
||||||
const value = (await this._channel.textContent({ selector, ...options })).value;
|
|
||||||
return value === void 0 ? null : value;
|
|
||||||
}
|
|
||||||
async innerText(selector, options = {}) {
|
|
||||||
return (await this._channel.innerText({ selector, ...options })).value;
|
|
||||||
}
|
|
||||||
async innerHTML(selector, options = {}) {
|
|
||||||
return (await this._channel.innerHTML({ selector, ...options })).value;
|
|
||||||
}
|
|
||||||
async getAttribute(selector, name, options = {}) {
|
|
||||||
const value = (await this._channel.getAttribute({ selector, name, ...options })).value;
|
|
||||||
return value === void 0 ? null : value;
|
|
||||||
}
|
|
||||||
async inputValue(selector, options = {}) {
|
|
||||||
return (await this._channel.inputValue({ selector, ...options })).value;
|
|
||||||
}
|
|
||||||
async isChecked(selector, options = {}) {
|
|
||||||
return (await this._channel.isChecked({ selector, ...options })).value;
|
|
||||||
}
|
|
||||||
async isDisabled(selector, options = {}) {
|
|
||||||
return (await this._channel.isDisabled({ selector, ...options })).value;
|
|
||||||
}
|
|
||||||
async isEditable(selector, options = {}) {
|
|
||||||
return (await this._channel.isEditable({ selector, ...options })).value;
|
|
||||||
}
|
|
||||||
async isEnabled(selector, options = {}) {
|
|
||||||
return (await this._channel.isEnabled({ selector, ...options })).value;
|
|
||||||
}
|
|
||||||
async isHidden(selector, options = {}) {
|
|
||||||
return (await this._channel.isHidden({ selector, ...options })).value;
|
|
||||||
}
|
|
||||||
async isVisible(selector, options = {}) {
|
|
||||||
return (await this._channel.isVisible({ selector, ...options })).value;
|
|
||||||
}
|
|
||||||
async hover(selector, options = {}) {
|
|
||||||
await this._channel.hover({ selector, ...options });
|
|
||||||
}
|
|
||||||
async selectOption(selector, values, options = {}) {
|
|
||||||
return (await this._channel.selectOption({ selector, ...(0, import_elementHandle.convertSelectOptionValues)(values), ...options })).values;
|
|
||||||
}
|
|
||||||
async setInputFiles(selector, files, options = {}) {
|
|
||||||
const converted = await (0, import_elementHandle.convertInputFiles)(this._platform, files, this.page().context());
|
|
||||||
await this._channel.setInputFiles({ selector, ...converted, ...options });
|
|
||||||
}
|
|
||||||
async type(selector, text, options = {}) {
|
|
||||||
await this._channel.type({ selector, text, ...options });
|
|
||||||
}
|
|
||||||
async press(selector, key, options = {}) {
|
|
||||||
await this._channel.press({ selector, key, ...options });
|
|
||||||
}
|
|
||||||
async check(selector, options = {}) {
|
|
||||||
await this._channel.check({ selector, ...options });
|
|
||||||
}
|
|
||||||
async uncheck(selector, options = {}) {
|
|
||||||
await this._channel.uncheck({ selector, ...options });
|
|
||||||
}
|
|
||||||
async setChecked(selector, checked, options) {
|
|
||||||
if (checked)
|
|
||||||
await this.check(selector, options);
|
|
||||||
else
|
|
||||||
await this.uncheck(selector, options);
|
|
||||||
}
|
|
||||||
async waitForTimeout(timeout) {
|
|
||||||
await this._channel.waitForTimeout({ timeout });
|
|
||||||
}
|
|
||||||
async waitForFunction(pageFunction, arg, options = {}) {
|
|
||||||
if (typeof options.polling === "string")
|
|
||||||
(0, import_assert.assert)(options.polling === "raf", "Unknown polling option: " + options.polling);
|
|
||||||
const result = await this._channel.waitForFunction({
|
|
||||||
...options,
|
|
||||||
pollingInterval: options.polling === "raf" ? void 0 : options.polling,
|
|
||||||
expression: String(pageFunction),
|
|
||||||
isFunction: typeof pageFunction === "function",
|
|
||||||
arg: (0, import_jsHandle.serializeArgument)(arg)
|
|
||||||
});
|
|
||||||
return import_jsHandle.JSHandle.from(result.handle);
|
|
||||||
}
|
|
||||||
async title() {
|
|
||||||
return (await this._channel.title()).value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function verifyLoadState(name, waitUntil) {
|
|
||||||
if (waitUntil === "networkidle0")
|
|
||||||
waitUntil = "networkidle";
|
|
||||||
if (!import_types.kLifecycleEvents.has(waitUntil))
|
|
||||||
throw new Error(`${name}: expected one of (load|domcontentloaded|networkidle|commit)`);
|
|
||||||
return waitUntil;
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
Frame,
|
|
||||||
verifyLoadState
|
|
||||||
});
|
|
||||||
87
tvapp2/node_modules/playwright-core/lib/client/harRouter.js
generated
vendored
87
tvapp2/node_modules/playwright-core/lib/client/harRouter.js
generated
vendored
@@ -1,87 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var harRouter_exports = {};
|
|
||||||
__export(harRouter_exports, {
|
|
||||||
HarRouter: () => HarRouter
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(harRouter_exports);
|
|
||||||
class HarRouter {
|
|
||||||
static async create(localUtils, file, notFoundAction, options) {
|
|
||||||
const { harId, error } = await localUtils.harOpen({ file });
|
|
||||||
if (error)
|
|
||||||
throw new Error(error);
|
|
||||||
return new HarRouter(localUtils, harId, notFoundAction, options);
|
|
||||||
}
|
|
||||||
constructor(localUtils, harId, notFoundAction, options) {
|
|
||||||
this._localUtils = localUtils;
|
|
||||||
this._harId = harId;
|
|
||||||
this._options = options;
|
|
||||||
this._notFoundAction = notFoundAction;
|
|
||||||
}
|
|
||||||
async _handle(route) {
|
|
||||||
const request = route.request();
|
|
||||||
const response = await this._localUtils.harLookup({
|
|
||||||
harId: this._harId,
|
|
||||||
url: request.url(),
|
|
||||||
method: request.method(),
|
|
||||||
headers: await request.headersArray(),
|
|
||||||
postData: request.postDataBuffer() || void 0,
|
|
||||||
isNavigationRequest: request.isNavigationRequest()
|
|
||||||
});
|
|
||||||
if (response.action === "redirect") {
|
|
||||||
route._platform.log("api", `HAR: ${route.request().url()} redirected to ${response.redirectURL}`);
|
|
||||||
await route._redirectNavigationRequest(response.redirectURL);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (response.action === "fulfill") {
|
|
||||||
if (response.status === -1)
|
|
||||||
return;
|
|
||||||
await route.fulfill({
|
|
||||||
status: response.status,
|
|
||||||
headers: Object.fromEntries(response.headers.map((h) => [h.name, h.value])),
|
|
||||||
body: response.body
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (response.action === "error")
|
|
||||||
route._platform.log("api", "HAR: " + response.message);
|
|
||||||
if (this._notFoundAction === "abort") {
|
|
||||||
await route.abort();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
await route.fallback();
|
|
||||||
}
|
|
||||||
async addContextRoute(context) {
|
|
||||||
await context.route(this._options.urlMatch || "**/*", (route) => this._handle(route));
|
|
||||||
}
|
|
||||||
async addPageRoute(page) {
|
|
||||||
await page.route(this._options.urlMatch || "**/*", (route) => this._handle(route));
|
|
||||||
}
|
|
||||||
async [Symbol.asyncDispose]() {
|
|
||||||
await this.dispose();
|
|
||||||
}
|
|
||||||
dispose() {
|
|
||||||
this._localUtils.harClose({ harId: this._harId }).catch(() => {
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
HarRouter
|
|
||||||
});
|
|
||||||
82
tvapp2/node_modules/playwright-core/lib/client/input.js
generated
vendored
82
tvapp2/node_modules/playwright-core/lib/client/input.js
generated
vendored
@@ -1,82 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var input_exports = {};
|
|
||||||
__export(input_exports, {
|
|
||||||
Keyboard: () => Keyboard,
|
|
||||||
Mouse: () => Mouse,
|
|
||||||
Touchscreen: () => Touchscreen
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(input_exports);
|
|
||||||
class Keyboard {
|
|
||||||
constructor(page) {
|
|
||||||
this._page = page;
|
|
||||||
}
|
|
||||||
async down(key) {
|
|
||||||
await this._page._channel.keyboardDown({ key });
|
|
||||||
}
|
|
||||||
async up(key) {
|
|
||||||
await this._page._channel.keyboardUp({ key });
|
|
||||||
}
|
|
||||||
async insertText(text) {
|
|
||||||
await this._page._channel.keyboardInsertText({ text });
|
|
||||||
}
|
|
||||||
async type(text, options = {}) {
|
|
||||||
await this._page._channel.keyboardType({ text, ...options });
|
|
||||||
}
|
|
||||||
async press(key, options = {}) {
|
|
||||||
await this._page._channel.keyboardPress({ key, ...options });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
class Mouse {
|
|
||||||
constructor(page) {
|
|
||||||
this._page = page;
|
|
||||||
}
|
|
||||||
async move(x, y, options = {}) {
|
|
||||||
await this._page._channel.mouseMove({ x, y, ...options });
|
|
||||||
}
|
|
||||||
async down(options = {}) {
|
|
||||||
await this._page._channel.mouseDown({ ...options });
|
|
||||||
}
|
|
||||||
async up(options = {}) {
|
|
||||||
await this._page._channel.mouseUp(options);
|
|
||||||
}
|
|
||||||
async click(x, y, options = {}) {
|
|
||||||
await this._page._channel.mouseClick({ x, y, ...options });
|
|
||||||
}
|
|
||||||
async dblclick(x, y, options = {}) {
|
|
||||||
await this.click(x, y, { ...options, clickCount: 2 });
|
|
||||||
}
|
|
||||||
async wheel(deltaX, deltaY) {
|
|
||||||
await this._page._channel.mouseWheel({ deltaX, deltaY });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
class Touchscreen {
|
|
||||||
constructor(page) {
|
|
||||||
this._page = page;
|
|
||||||
}
|
|
||||||
async tap(x, y) {
|
|
||||||
await this._page._channel.touchscreenTap({ x, y });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
Keyboard,
|
|
||||||
Mouse,
|
|
||||||
Touchscreen
|
|
||||||
});
|
|
||||||
105
tvapp2/node_modules/playwright-core/lib/client/jsHandle.js
generated
vendored
105
tvapp2/node_modules/playwright-core/lib/client/jsHandle.js
generated
vendored
@@ -1,105 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var jsHandle_exports = {};
|
|
||||||
__export(jsHandle_exports, {
|
|
||||||
JSHandle: () => JSHandle,
|
|
||||||
assertMaxArguments: () => assertMaxArguments,
|
|
||||||
parseResult: () => parseResult,
|
|
||||||
serializeArgument: () => serializeArgument
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(jsHandle_exports);
|
|
||||||
var import_channelOwner = require("./channelOwner");
|
|
||||||
var import_errors = require("./errors");
|
|
||||||
var import_serializers = require("../protocol/serializers");
|
|
||||||
class JSHandle extends import_channelOwner.ChannelOwner {
|
|
||||||
static from(handle) {
|
|
||||||
return handle._object;
|
|
||||||
}
|
|
||||||
constructor(parent, type, guid, initializer) {
|
|
||||||
super(parent, type, guid, initializer);
|
|
||||||
this._preview = this._initializer.preview;
|
|
||||||
this._channel.on("previewUpdated", ({ preview }) => this._preview = preview);
|
|
||||||
}
|
|
||||||
async evaluate(pageFunction, arg) {
|
|
||||||
const result = await this._channel.evaluateExpression({ expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: serializeArgument(arg) });
|
|
||||||
return parseResult(result.value);
|
|
||||||
}
|
|
||||||
async evaluateHandle(pageFunction, arg) {
|
|
||||||
const result = await this._channel.evaluateExpressionHandle({ expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: serializeArgument(arg) });
|
|
||||||
return JSHandle.from(result.handle);
|
|
||||||
}
|
|
||||||
async getProperty(propertyName) {
|
|
||||||
const result = await this._channel.getProperty({ name: propertyName });
|
|
||||||
return JSHandle.from(result.handle);
|
|
||||||
}
|
|
||||||
async getProperties() {
|
|
||||||
const map = /* @__PURE__ */ new Map();
|
|
||||||
for (const { name, value } of (await this._channel.getPropertyList()).properties)
|
|
||||||
map.set(name, JSHandle.from(value));
|
|
||||||
return map;
|
|
||||||
}
|
|
||||||
async jsonValue() {
|
|
||||||
return parseResult((await this._channel.jsonValue()).value);
|
|
||||||
}
|
|
||||||
asElement() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
async [Symbol.asyncDispose]() {
|
|
||||||
await this.dispose();
|
|
||||||
}
|
|
||||||
async dispose() {
|
|
||||||
try {
|
|
||||||
await this._channel.dispose();
|
|
||||||
} catch (e) {
|
|
||||||
if ((0, import_errors.isTargetClosedError)(e))
|
|
||||||
return;
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
toString() {
|
|
||||||
return this._preview;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function serializeArgument(arg) {
|
|
||||||
const handles = [];
|
|
||||||
const pushHandle = (channel) => {
|
|
||||||
handles.push(channel);
|
|
||||||
return handles.length - 1;
|
|
||||||
};
|
|
||||||
const value = (0, import_serializers.serializeValue)(arg, (value2) => {
|
|
||||||
if (value2 instanceof JSHandle)
|
|
||||||
return { h: pushHandle(value2._channel) };
|
|
||||||
return { fallThrough: value2 };
|
|
||||||
});
|
|
||||||
return { value, handles };
|
|
||||||
}
|
|
||||||
function parseResult(value) {
|
|
||||||
return (0, import_serializers.parseSerializedValue)(value, void 0);
|
|
||||||
}
|
|
||||||
function assertMaxArguments(count, max) {
|
|
||||||
if (count > max)
|
|
||||||
throw new Error("Too many arguments. If you need to pass more than 1 argument to the function wrap them in an object.");
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
JSHandle,
|
|
||||||
assertMaxArguments,
|
|
||||||
parseResult,
|
|
||||||
serializeArgument
|
|
||||||
});
|
|
||||||
39
tvapp2/node_modules/playwright-core/lib/client/jsonPipe.js
generated
vendored
39
tvapp2/node_modules/playwright-core/lib/client/jsonPipe.js
generated
vendored
@@ -1,39 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var jsonPipe_exports = {};
|
|
||||||
__export(jsonPipe_exports, {
|
|
||||||
JsonPipe: () => JsonPipe
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(jsonPipe_exports);
|
|
||||||
var import_channelOwner = require("./channelOwner");
|
|
||||||
class JsonPipe extends import_channelOwner.ChannelOwner {
|
|
||||||
static from(jsonPipe) {
|
|
||||||
return jsonPipe._object;
|
|
||||||
}
|
|
||||||
constructor(parent, type, guid, initializer) {
|
|
||||||
super(parent, type, guid, initializer);
|
|
||||||
}
|
|
||||||
channel() {
|
|
||||||
return this._channel;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
JsonPipe
|
|
||||||
});
|
|
||||||
61
tvapp2/node_modules/playwright-core/lib/client/localUtils.js
generated
vendored
61
tvapp2/node_modules/playwright-core/lib/client/localUtils.js
generated
vendored
@@ -1,61 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var localUtils_exports = {};
|
|
||||||
__export(localUtils_exports, {
|
|
||||||
LocalUtils: () => LocalUtils
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(localUtils_exports);
|
|
||||||
var import_channelOwner = require("./channelOwner");
|
|
||||||
class LocalUtils extends import_channelOwner.ChannelOwner {
|
|
||||||
constructor(parent, type, guid, initializer) {
|
|
||||||
super(parent, type, guid, initializer);
|
|
||||||
this.markAsInternalType();
|
|
||||||
this.devices = {};
|
|
||||||
for (const { name, descriptor } of initializer.deviceDescriptors)
|
|
||||||
this.devices[name] = descriptor;
|
|
||||||
}
|
|
||||||
async zip(params) {
|
|
||||||
return await this._channel.zip(params);
|
|
||||||
}
|
|
||||||
async harOpen(params) {
|
|
||||||
return await this._channel.harOpen(params);
|
|
||||||
}
|
|
||||||
async harLookup(params) {
|
|
||||||
return await this._channel.harLookup(params);
|
|
||||||
}
|
|
||||||
async harClose(params) {
|
|
||||||
return await this._channel.harClose(params);
|
|
||||||
}
|
|
||||||
async harUnzip(params) {
|
|
||||||
return await this._channel.harUnzip(params);
|
|
||||||
}
|
|
||||||
async tracingStarted(params) {
|
|
||||||
return await this._channel.tracingStarted(params);
|
|
||||||
}
|
|
||||||
async traceDiscarded(params) {
|
|
||||||
return await this._channel.traceDiscarded(params);
|
|
||||||
}
|
|
||||||
async addStackToTracingNoReply(params) {
|
|
||||||
return await this._channel.addStackToTracingNoReply(params);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
LocalUtils
|
|
||||||
});
|
|
||||||
362
tvapp2/node_modules/playwright-core/lib/client/locator.js
generated
vendored
362
tvapp2/node_modules/playwright-core/lib/client/locator.js
generated
vendored
@@ -1,362 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var locator_exports = {};
|
|
||||||
__export(locator_exports, {
|
|
||||||
FrameLocator: () => FrameLocator,
|
|
||||||
Locator: () => Locator,
|
|
||||||
setTestIdAttribute: () => setTestIdAttribute,
|
|
||||||
testIdAttributeName: () => testIdAttributeName
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(locator_exports);
|
|
||||||
var import_elementHandle = require("./elementHandle");
|
|
||||||
var import_jsHandle = require("./jsHandle");
|
|
||||||
var import_locatorGenerators = require("../utils/isomorphic/locatorGenerators");
|
|
||||||
var import_locatorUtils = require("../utils/isomorphic/locatorUtils");
|
|
||||||
var import_stringUtils = require("../utils/isomorphic/stringUtils");
|
|
||||||
var import_rtti = require("../utils/isomorphic/rtti");
|
|
||||||
var import_time = require("../utils/isomorphic/time");
|
|
||||||
class Locator {
|
|
||||||
constructor(frame, selector, options) {
|
|
||||||
this._frame = frame;
|
|
||||||
this._selector = selector;
|
|
||||||
if (options?.hasText)
|
|
||||||
this._selector += ` >> internal:has-text=${(0, import_stringUtils.escapeForTextSelector)(options.hasText, false)}`;
|
|
||||||
if (options?.hasNotText)
|
|
||||||
this._selector += ` >> internal:has-not-text=${(0, import_stringUtils.escapeForTextSelector)(options.hasNotText, false)}`;
|
|
||||||
if (options?.has) {
|
|
||||||
const locator = options.has;
|
|
||||||
if (locator._frame !== frame)
|
|
||||||
throw new Error(`Inner "has" locator must belong to the same frame.`);
|
|
||||||
this._selector += ` >> internal:has=` + JSON.stringify(locator._selector);
|
|
||||||
}
|
|
||||||
if (options?.hasNot) {
|
|
||||||
const locator = options.hasNot;
|
|
||||||
if (locator._frame !== frame)
|
|
||||||
throw new Error(`Inner "hasNot" locator must belong to the same frame.`);
|
|
||||||
this._selector += ` >> internal:has-not=` + JSON.stringify(locator._selector);
|
|
||||||
}
|
|
||||||
if (options?.visible !== void 0)
|
|
||||||
this._selector += ` >> visible=${options.visible ? "true" : "false"}`;
|
|
||||||
if (this._frame._platform.inspectCustom)
|
|
||||||
this[this._frame._platform.inspectCustom] = () => this._inspect();
|
|
||||||
}
|
|
||||||
async _withElement(task, timeout) {
|
|
||||||
timeout = this._frame.page()._timeoutSettings.timeout({ timeout });
|
|
||||||
const deadline = timeout ? (0, import_time.monotonicTime)() + timeout : 0;
|
|
||||||
return await this._frame._wrapApiCall(async () => {
|
|
||||||
const result = await this._frame._channel.waitForSelector({ selector: this._selector, strict: true, state: "attached", timeout });
|
|
||||||
const handle = import_elementHandle.ElementHandle.fromNullable(result.element);
|
|
||||||
if (!handle)
|
|
||||||
throw new Error(`Could not resolve ${this._selector} to DOM Element`);
|
|
||||||
try {
|
|
||||||
return await task(handle, deadline ? deadline - (0, import_time.monotonicTime)() : 0);
|
|
||||||
} finally {
|
|
||||||
await handle.dispose();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
_equals(locator) {
|
|
||||||
return this._frame === locator._frame && this._selector === locator._selector;
|
|
||||||
}
|
|
||||||
page() {
|
|
||||||
return this._frame.page();
|
|
||||||
}
|
|
||||||
async boundingBox(options) {
|
|
||||||
return await this._withElement((h) => h.boundingBox(), options?.timeout);
|
|
||||||
}
|
|
||||||
async check(options = {}) {
|
|
||||||
return await this._frame.check(this._selector, { strict: true, ...options });
|
|
||||||
}
|
|
||||||
async click(options = {}) {
|
|
||||||
return await this._frame.click(this._selector, { strict: true, ...options });
|
|
||||||
}
|
|
||||||
async dblclick(options = {}) {
|
|
||||||
return await this._frame.dblclick(this._selector, { strict: true, ...options });
|
|
||||||
}
|
|
||||||
async dispatchEvent(type, eventInit = {}, options) {
|
|
||||||
return await this._frame.dispatchEvent(this._selector, type, eventInit, { strict: true, ...options });
|
|
||||||
}
|
|
||||||
async dragTo(target, options = {}) {
|
|
||||||
return await this._frame.dragAndDrop(this._selector, target._selector, {
|
|
||||||
strict: true,
|
|
||||||
...options
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async evaluate(pageFunction, arg, options) {
|
|
||||||
return await this._withElement((h) => h.evaluate(pageFunction, arg), options?.timeout);
|
|
||||||
}
|
|
||||||
async evaluateAll(pageFunction, arg) {
|
|
||||||
return await this._frame.$$eval(this._selector, pageFunction, arg);
|
|
||||||
}
|
|
||||||
async evaluateHandle(pageFunction, arg, options) {
|
|
||||||
return await this._withElement((h) => h.evaluateHandle(pageFunction, arg), options?.timeout);
|
|
||||||
}
|
|
||||||
async fill(value, options = {}) {
|
|
||||||
return await this._frame.fill(this._selector, value, { strict: true, ...options });
|
|
||||||
}
|
|
||||||
async clear(options = {}) {
|
|
||||||
return await this.fill("", options);
|
|
||||||
}
|
|
||||||
async _highlight() {
|
|
||||||
return await this._frame._highlight(this._selector);
|
|
||||||
}
|
|
||||||
async highlight() {
|
|
||||||
return await this._frame._highlight(this._selector);
|
|
||||||
}
|
|
||||||
locator(selectorOrLocator, options) {
|
|
||||||
if ((0, import_rtti.isString)(selectorOrLocator))
|
|
||||||
return new Locator(this._frame, this._selector + " >> " + selectorOrLocator, options);
|
|
||||||
if (selectorOrLocator._frame !== this._frame)
|
|
||||||
throw new Error(`Locators must belong to the same frame.`);
|
|
||||||
return new Locator(this._frame, this._selector + " >> internal:chain=" + JSON.stringify(selectorOrLocator._selector), options);
|
|
||||||
}
|
|
||||||
getByTestId(testId) {
|
|
||||||
return this.locator((0, import_locatorUtils.getByTestIdSelector)(testIdAttributeName(), testId));
|
|
||||||
}
|
|
||||||
getByAltText(text, options) {
|
|
||||||
return this.locator((0, import_locatorUtils.getByAltTextSelector)(text, options));
|
|
||||||
}
|
|
||||||
getByLabel(text, options) {
|
|
||||||
return this.locator((0, import_locatorUtils.getByLabelSelector)(text, options));
|
|
||||||
}
|
|
||||||
getByPlaceholder(text, options) {
|
|
||||||
return this.locator((0, import_locatorUtils.getByPlaceholderSelector)(text, options));
|
|
||||||
}
|
|
||||||
getByText(text, options) {
|
|
||||||
return this.locator((0, import_locatorUtils.getByTextSelector)(text, options));
|
|
||||||
}
|
|
||||||
getByTitle(text, options) {
|
|
||||||
return this.locator((0, import_locatorUtils.getByTitleSelector)(text, options));
|
|
||||||
}
|
|
||||||
getByRole(role, options = {}) {
|
|
||||||
return this.locator((0, import_locatorUtils.getByRoleSelector)(role, options));
|
|
||||||
}
|
|
||||||
frameLocator(selector) {
|
|
||||||
return new FrameLocator(this._frame, this._selector + " >> " + selector);
|
|
||||||
}
|
|
||||||
filter(options) {
|
|
||||||
return new Locator(this._frame, this._selector, options);
|
|
||||||
}
|
|
||||||
async elementHandle(options) {
|
|
||||||
return await this._frame.waitForSelector(this._selector, { strict: true, state: "attached", ...options });
|
|
||||||
}
|
|
||||||
async elementHandles() {
|
|
||||||
return await this._frame.$$(this._selector);
|
|
||||||
}
|
|
||||||
contentFrame() {
|
|
||||||
return new FrameLocator(this._frame, this._selector);
|
|
||||||
}
|
|
||||||
first() {
|
|
||||||
return new Locator(this._frame, this._selector + " >> nth=0");
|
|
||||||
}
|
|
||||||
last() {
|
|
||||||
return new Locator(this._frame, this._selector + ` >> nth=-1`);
|
|
||||||
}
|
|
||||||
nth(index) {
|
|
||||||
return new Locator(this._frame, this._selector + ` >> nth=${index}`);
|
|
||||||
}
|
|
||||||
and(locator) {
|
|
||||||
if (locator._frame !== this._frame)
|
|
||||||
throw new Error(`Locators must belong to the same frame.`);
|
|
||||||
return new Locator(this._frame, this._selector + ` >> internal:and=` + JSON.stringify(locator._selector));
|
|
||||||
}
|
|
||||||
or(locator) {
|
|
||||||
if (locator._frame !== this._frame)
|
|
||||||
throw new Error(`Locators must belong to the same frame.`);
|
|
||||||
return new Locator(this._frame, this._selector + ` >> internal:or=` + JSON.stringify(locator._selector));
|
|
||||||
}
|
|
||||||
async focus(options) {
|
|
||||||
return await this._frame.focus(this._selector, { strict: true, ...options });
|
|
||||||
}
|
|
||||||
async blur(options) {
|
|
||||||
await this._frame._channel.blur({ selector: this._selector, strict: true, ...options });
|
|
||||||
}
|
|
||||||
async count() {
|
|
||||||
return await this._frame._queryCount(this._selector);
|
|
||||||
}
|
|
||||||
async _generateLocatorString() {
|
|
||||||
return await this._withElement((h) => h._generateLocatorString());
|
|
||||||
}
|
|
||||||
async getAttribute(name, options) {
|
|
||||||
return await this._frame.getAttribute(this._selector, name, { strict: true, ...options });
|
|
||||||
}
|
|
||||||
async hover(options = {}) {
|
|
||||||
return await this._frame.hover(this._selector, { strict: true, ...options });
|
|
||||||
}
|
|
||||||
async innerHTML(options) {
|
|
||||||
return await this._frame.innerHTML(this._selector, { strict: true, ...options });
|
|
||||||
}
|
|
||||||
async innerText(options) {
|
|
||||||
return await this._frame.innerText(this._selector, { strict: true, ...options });
|
|
||||||
}
|
|
||||||
async inputValue(options) {
|
|
||||||
return await this._frame.inputValue(this._selector, { strict: true, ...options });
|
|
||||||
}
|
|
||||||
async isChecked(options) {
|
|
||||||
return await this._frame.isChecked(this._selector, { strict: true, ...options });
|
|
||||||
}
|
|
||||||
async isDisabled(options) {
|
|
||||||
return await this._frame.isDisabled(this._selector, { strict: true, ...options });
|
|
||||||
}
|
|
||||||
async isEditable(options) {
|
|
||||||
return await this._frame.isEditable(this._selector, { strict: true, ...options });
|
|
||||||
}
|
|
||||||
async isEnabled(options) {
|
|
||||||
return await this._frame.isEnabled(this._selector, { strict: true, ...options });
|
|
||||||
}
|
|
||||||
async isHidden(options) {
|
|
||||||
return await this._frame.isHidden(this._selector, { strict: true, ...options });
|
|
||||||
}
|
|
||||||
async isVisible(options) {
|
|
||||||
return await this._frame.isVisible(this._selector, { strict: true, ...options });
|
|
||||||
}
|
|
||||||
async press(key, options = {}) {
|
|
||||||
return await this._frame.press(this._selector, key, { strict: true, ...options });
|
|
||||||
}
|
|
||||||
async screenshot(options = {}) {
|
|
||||||
const mask = options.mask;
|
|
||||||
return await this._withElement((h, timeout) => h.screenshot({ ...options, mask, timeout }), options.timeout);
|
|
||||||
}
|
|
||||||
async ariaSnapshot(options) {
|
|
||||||
const result = await this._frame._channel.ariaSnapshot({ ...options, mode: options?._mode, selector: this._selector });
|
|
||||||
return result.snapshot;
|
|
||||||
}
|
|
||||||
async scrollIntoViewIfNeeded(options = {}) {
|
|
||||||
return await this._withElement((h, timeout) => h.scrollIntoViewIfNeeded({ ...options, timeout }), options.timeout);
|
|
||||||
}
|
|
||||||
async selectOption(values, options = {}) {
|
|
||||||
return await this._frame.selectOption(this._selector, values, { strict: true, ...options });
|
|
||||||
}
|
|
||||||
async selectText(options = {}) {
|
|
||||||
return await this._withElement((h, timeout) => h.selectText({ ...options, timeout }), options.timeout);
|
|
||||||
}
|
|
||||||
async setChecked(checked, options) {
|
|
||||||
if (checked)
|
|
||||||
await this.check(options);
|
|
||||||
else
|
|
||||||
await this.uncheck(options);
|
|
||||||
}
|
|
||||||
async setInputFiles(files, options = {}) {
|
|
||||||
return await this._frame.setInputFiles(this._selector, files, { strict: true, ...options });
|
|
||||||
}
|
|
||||||
async tap(options = {}) {
|
|
||||||
return await this._frame.tap(this._selector, { strict: true, ...options });
|
|
||||||
}
|
|
||||||
async textContent(options) {
|
|
||||||
return await this._frame.textContent(this._selector, { strict: true, ...options });
|
|
||||||
}
|
|
||||||
async type(text, options = {}) {
|
|
||||||
return await this._frame.type(this._selector, text, { strict: true, ...options });
|
|
||||||
}
|
|
||||||
async pressSequentially(text, options = {}) {
|
|
||||||
return await this.type(text, options);
|
|
||||||
}
|
|
||||||
async uncheck(options = {}) {
|
|
||||||
return await this._frame.uncheck(this._selector, { strict: true, ...options });
|
|
||||||
}
|
|
||||||
async all() {
|
|
||||||
return new Array(await this.count()).fill(0).map((e, i) => this.nth(i));
|
|
||||||
}
|
|
||||||
async allInnerTexts() {
|
|
||||||
return await this._frame.$$eval(this._selector, (ee) => ee.map((e) => e.innerText));
|
|
||||||
}
|
|
||||||
async allTextContents() {
|
|
||||||
return await this._frame.$$eval(this._selector, (ee) => ee.map((e) => e.textContent || ""));
|
|
||||||
}
|
|
||||||
async waitFor(options) {
|
|
||||||
await this._frame._channel.waitForSelector({ selector: this._selector, strict: true, omitReturnValue: true, ...options });
|
|
||||||
}
|
|
||||||
async _expect(expression, options) {
|
|
||||||
const params = { selector: this._selector, expression, ...options, isNot: !!options.isNot };
|
|
||||||
params.expectedValue = (0, import_jsHandle.serializeArgument)(options.expectedValue);
|
|
||||||
const result = await this._frame._channel.expect(params);
|
|
||||||
if (result.received !== void 0)
|
|
||||||
result.received = (0, import_jsHandle.parseResult)(result.received);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
_inspect() {
|
|
||||||
return this.toString();
|
|
||||||
}
|
|
||||||
toString() {
|
|
||||||
return (0, import_locatorGenerators.asLocator)("javascript", this._selector);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
class FrameLocator {
|
|
||||||
constructor(frame, selector) {
|
|
||||||
this._frame = frame;
|
|
||||||
this._frameSelector = selector;
|
|
||||||
}
|
|
||||||
locator(selectorOrLocator, options) {
|
|
||||||
if ((0, import_rtti.isString)(selectorOrLocator))
|
|
||||||
return new Locator(this._frame, this._frameSelector + " >> internal:control=enter-frame >> " + selectorOrLocator, options);
|
|
||||||
if (selectorOrLocator._frame !== this._frame)
|
|
||||||
throw new Error(`Locators must belong to the same frame.`);
|
|
||||||
return new Locator(this._frame, this._frameSelector + " >> internal:control=enter-frame >> " + selectorOrLocator._selector, options);
|
|
||||||
}
|
|
||||||
getByTestId(testId) {
|
|
||||||
return this.locator((0, import_locatorUtils.getByTestIdSelector)(testIdAttributeName(), testId));
|
|
||||||
}
|
|
||||||
getByAltText(text, options) {
|
|
||||||
return this.locator((0, import_locatorUtils.getByAltTextSelector)(text, options));
|
|
||||||
}
|
|
||||||
getByLabel(text, options) {
|
|
||||||
return this.locator((0, import_locatorUtils.getByLabelSelector)(text, options));
|
|
||||||
}
|
|
||||||
getByPlaceholder(text, options) {
|
|
||||||
return this.locator((0, import_locatorUtils.getByPlaceholderSelector)(text, options));
|
|
||||||
}
|
|
||||||
getByText(text, options) {
|
|
||||||
return this.locator((0, import_locatorUtils.getByTextSelector)(text, options));
|
|
||||||
}
|
|
||||||
getByTitle(text, options) {
|
|
||||||
return this.locator((0, import_locatorUtils.getByTitleSelector)(text, options));
|
|
||||||
}
|
|
||||||
getByRole(role, options = {}) {
|
|
||||||
return this.locator((0, import_locatorUtils.getByRoleSelector)(role, options));
|
|
||||||
}
|
|
||||||
owner() {
|
|
||||||
return new Locator(this._frame, this._frameSelector);
|
|
||||||
}
|
|
||||||
frameLocator(selector) {
|
|
||||||
return new FrameLocator(this._frame, this._frameSelector + " >> internal:control=enter-frame >> " + selector);
|
|
||||||
}
|
|
||||||
first() {
|
|
||||||
return new FrameLocator(this._frame, this._frameSelector + " >> nth=0");
|
|
||||||
}
|
|
||||||
last() {
|
|
||||||
return new FrameLocator(this._frame, this._frameSelector + ` >> nth=-1`);
|
|
||||||
}
|
|
||||||
nth(index) {
|
|
||||||
return new FrameLocator(this._frame, this._frameSelector + ` >> nth=${index}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let _testIdAttributeName = "data-testid";
|
|
||||||
function testIdAttributeName() {
|
|
||||||
return _testIdAttributeName;
|
|
||||||
}
|
|
||||||
function setTestIdAttribute(attributeName) {
|
|
||||||
_testIdAttributeName = attributeName;
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
FrameLocator,
|
|
||||||
Locator,
|
|
||||||
setTestIdAttribute,
|
|
||||||
testIdAttributeName
|
|
||||||
});
|
|
||||||
751
tvapp2/node_modules/playwright-core/lib/client/network.js
generated
vendored
751
tvapp2/node_modules/playwright-core/lib/client/network.js
generated
vendored
@@ -1,751 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var network_exports = {};
|
|
||||||
__export(network_exports, {
|
|
||||||
RawHeaders: () => RawHeaders,
|
|
||||||
Request: () => Request,
|
|
||||||
Response: () => Response,
|
|
||||||
Route: () => Route,
|
|
||||||
RouteHandler: () => RouteHandler,
|
|
||||||
WebSocket: () => WebSocket,
|
|
||||||
WebSocketRoute: () => WebSocketRoute,
|
|
||||||
WebSocketRouteHandler: () => WebSocketRouteHandler,
|
|
||||||
validateHeaders: () => validateHeaders
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(network_exports);
|
|
||||||
var import_channelOwner = require("./channelOwner");
|
|
||||||
var import_errors = require("./errors");
|
|
||||||
var import_events = require("./events");
|
|
||||||
var import_fetch = require("./fetch");
|
|
||||||
var import_frame = require("./frame");
|
|
||||||
var import_waiter = require("./waiter");
|
|
||||||
var import_worker = require("./worker");
|
|
||||||
var import_assert = require("../utils/isomorphic/assert");
|
|
||||||
var import_headers = require("../utils/isomorphic/headers");
|
|
||||||
var import_urlMatch = require("../utils/isomorphic/urlMatch");
|
|
||||||
var import_manualPromise = require("../utils/isomorphic/manualPromise");
|
|
||||||
var import_multimap = require("../utils/isomorphic/multimap");
|
|
||||||
var import_rtti = require("../utils/isomorphic/rtti");
|
|
||||||
var import_stackTrace = require("../utils/isomorphic/stackTrace");
|
|
||||||
var import_mimeType = require("../utils/isomorphic/mimeType");
|
|
||||||
class Request extends import_channelOwner.ChannelOwner {
|
|
||||||
constructor(parent, type, guid, initializer) {
|
|
||||||
super(parent, type, guid, initializer);
|
|
||||||
this._redirectedFrom = null;
|
|
||||||
this._redirectedTo = null;
|
|
||||||
this._failureText = null;
|
|
||||||
this._fallbackOverrides = {};
|
|
||||||
this.markAsInternalType();
|
|
||||||
this._redirectedFrom = Request.fromNullable(initializer.redirectedFrom);
|
|
||||||
if (this._redirectedFrom)
|
|
||||||
this._redirectedFrom._redirectedTo = this;
|
|
||||||
this._provisionalHeaders = new RawHeaders(initializer.headers);
|
|
||||||
this._timing = {
|
|
||||||
startTime: 0,
|
|
||||||
domainLookupStart: -1,
|
|
||||||
domainLookupEnd: -1,
|
|
||||||
connectStart: -1,
|
|
||||||
secureConnectionStart: -1,
|
|
||||||
connectEnd: -1,
|
|
||||||
requestStart: -1,
|
|
||||||
responseStart: -1,
|
|
||||||
responseEnd: -1
|
|
||||||
};
|
|
||||||
}
|
|
||||||
static from(request) {
|
|
||||||
return request._object;
|
|
||||||
}
|
|
||||||
static fromNullable(request) {
|
|
||||||
return request ? Request.from(request) : null;
|
|
||||||
}
|
|
||||||
url() {
|
|
||||||
return this._fallbackOverrides.url || this._initializer.url;
|
|
||||||
}
|
|
||||||
resourceType() {
|
|
||||||
return this._initializer.resourceType;
|
|
||||||
}
|
|
||||||
method() {
|
|
||||||
return this._fallbackOverrides.method || this._initializer.method;
|
|
||||||
}
|
|
||||||
postData() {
|
|
||||||
return (this._fallbackOverrides.postDataBuffer || this._initializer.postData)?.toString("utf-8") || null;
|
|
||||||
}
|
|
||||||
postDataBuffer() {
|
|
||||||
return this._fallbackOverrides.postDataBuffer || this._initializer.postData || null;
|
|
||||||
}
|
|
||||||
postDataJSON() {
|
|
||||||
const postData = this.postData();
|
|
||||||
if (!postData)
|
|
||||||
return null;
|
|
||||||
const contentType = this.headers()["content-type"];
|
|
||||||
if (contentType?.includes("application/x-www-form-urlencoded")) {
|
|
||||||
const entries = {};
|
|
||||||
const parsed = new URLSearchParams(postData);
|
|
||||||
for (const [k, v] of parsed.entries())
|
|
||||||
entries[k] = v;
|
|
||||||
return entries;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
return JSON.parse(postData);
|
|
||||||
} catch (e) {
|
|
||||||
throw new Error("POST data is not a valid JSON object: " + postData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* @deprecated
|
|
||||||
*/
|
|
||||||
headers() {
|
|
||||||
if (this._fallbackOverrides.headers)
|
|
||||||
return RawHeaders._fromHeadersObjectLossy(this._fallbackOverrides.headers).headers();
|
|
||||||
return this._provisionalHeaders.headers();
|
|
||||||
}
|
|
||||||
async _actualHeaders() {
|
|
||||||
if (this._fallbackOverrides.headers)
|
|
||||||
return RawHeaders._fromHeadersObjectLossy(this._fallbackOverrides.headers);
|
|
||||||
if (!this._actualHeadersPromise) {
|
|
||||||
this._actualHeadersPromise = this._wrapApiCall(async () => {
|
|
||||||
return new RawHeaders((await this._channel.rawRequestHeaders()).headers);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return await this._actualHeadersPromise;
|
|
||||||
}
|
|
||||||
async allHeaders() {
|
|
||||||
return (await this._actualHeaders()).headers();
|
|
||||||
}
|
|
||||||
async headersArray() {
|
|
||||||
return (await this._actualHeaders()).headersArray();
|
|
||||||
}
|
|
||||||
async headerValue(name) {
|
|
||||||
return (await this._actualHeaders()).get(name);
|
|
||||||
}
|
|
||||||
async response() {
|
|
||||||
return Response.fromNullable((await this._channel.response()).response);
|
|
||||||
}
|
|
||||||
async _internalResponse() {
|
|
||||||
return await this._wrapApiCall(async () => {
|
|
||||||
return Response.fromNullable((await this._channel.response()).response);
|
|
||||||
}, true);
|
|
||||||
}
|
|
||||||
frame() {
|
|
||||||
if (!this._initializer.frame) {
|
|
||||||
(0, import_assert.assert)(this.serviceWorker());
|
|
||||||
throw new Error("Service Worker requests do not have an associated frame.");
|
|
||||||
}
|
|
||||||
const frame = import_frame.Frame.from(this._initializer.frame);
|
|
||||||
if (!frame._page) {
|
|
||||||
throw new Error([
|
|
||||||
"Frame for this navigation request is not available, because the request",
|
|
||||||
"was issued before the frame is created. You can check whether the request",
|
|
||||||
"is a navigation request by calling isNavigationRequest() method."
|
|
||||||
].join("\n"));
|
|
||||||
}
|
|
||||||
return frame;
|
|
||||||
}
|
|
||||||
_safePage() {
|
|
||||||
return import_frame.Frame.fromNullable(this._initializer.frame)?._page || null;
|
|
||||||
}
|
|
||||||
serviceWorker() {
|
|
||||||
return this._initializer.serviceWorker ? import_worker.Worker.from(this._initializer.serviceWorker) : null;
|
|
||||||
}
|
|
||||||
isNavigationRequest() {
|
|
||||||
return this._initializer.isNavigationRequest;
|
|
||||||
}
|
|
||||||
redirectedFrom() {
|
|
||||||
return this._redirectedFrom;
|
|
||||||
}
|
|
||||||
redirectedTo() {
|
|
||||||
return this._redirectedTo;
|
|
||||||
}
|
|
||||||
failure() {
|
|
||||||
if (this._failureText === null)
|
|
||||||
return null;
|
|
||||||
return {
|
|
||||||
errorText: this._failureText
|
|
||||||
};
|
|
||||||
}
|
|
||||||
timing() {
|
|
||||||
return this._timing;
|
|
||||||
}
|
|
||||||
async sizes() {
|
|
||||||
const response = await this.response();
|
|
||||||
if (!response)
|
|
||||||
throw new Error("Unable to fetch sizes for failed request");
|
|
||||||
return (await response._channel.sizes()).sizes;
|
|
||||||
}
|
|
||||||
_setResponseEndTiming(responseEndTiming) {
|
|
||||||
this._timing.responseEnd = responseEndTiming;
|
|
||||||
if (this._timing.responseStart === -1)
|
|
||||||
this._timing.responseStart = responseEndTiming;
|
|
||||||
}
|
|
||||||
_finalRequest() {
|
|
||||||
return this._redirectedTo ? this._redirectedTo._finalRequest() : this;
|
|
||||||
}
|
|
||||||
_applyFallbackOverrides(overrides) {
|
|
||||||
if (overrides.url)
|
|
||||||
this._fallbackOverrides.url = overrides.url;
|
|
||||||
if (overrides.method)
|
|
||||||
this._fallbackOverrides.method = overrides.method;
|
|
||||||
if (overrides.headers)
|
|
||||||
this._fallbackOverrides.headers = overrides.headers;
|
|
||||||
if ((0, import_rtti.isString)(overrides.postData))
|
|
||||||
this._fallbackOverrides.postDataBuffer = Buffer.from(overrides.postData, "utf-8");
|
|
||||||
else if (overrides.postData instanceof Buffer)
|
|
||||||
this._fallbackOverrides.postDataBuffer = overrides.postData;
|
|
||||||
else if (overrides.postData)
|
|
||||||
this._fallbackOverrides.postDataBuffer = Buffer.from(JSON.stringify(overrides.postData), "utf-8");
|
|
||||||
}
|
|
||||||
_fallbackOverridesForContinue() {
|
|
||||||
return this._fallbackOverrides;
|
|
||||||
}
|
|
||||||
_targetClosedScope() {
|
|
||||||
return this.serviceWorker()?._closedScope || this._safePage()?._closedOrCrashedScope || new import_manualPromise.LongStandingScope();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
class Route extends import_channelOwner.ChannelOwner {
|
|
||||||
constructor(parent, type, guid, initializer) {
|
|
||||||
super(parent, type, guid, initializer);
|
|
||||||
this._handlingPromise = null;
|
|
||||||
this._didThrow = false;
|
|
||||||
this.markAsInternalType();
|
|
||||||
}
|
|
||||||
static from(route) {
|
|
||||||
return route._object;
|
|
||||||
}
|
|
||||||
request() {
|
|
||||||
return Request.from(this._initializer.request);
|
|
||||||
}
|
|
||||||
async _raceWithTargetClose(promise) {
|
|
||||||
return await this.request()._targetClosedScope().safeRace(promise);
|
|
||||||
}
|
|
||||||
async _startHandling() {
|
|
||||||
this._handlingPromise = new import_manualPromise.ManualPromise();
|
|
||||||
return await this._handlingPromise;
|
|
||||||
}
|
|
||||||
async fallback(options = {}) {
|
|
||||||
this._checkNotHandled();
|
|
||||||
this.request()._applyFallbackOverrides(options);
|
|
||||||
this._reportHandled(false);
|
|
||||||
}
|
|
||||||
async abort(errorCode) {
|
|
||||||
await this._handleRoute(async () => {
|
|
||||||
await this._raceWithTargetClose(this._channel.abort({ errorCode }));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async _redirectNavigationRequest(url) {
|
|
||||||
await this._handleRoute(async () => {
|
|
||||||
await this._raceWithTargetClose(this._channel.redirectNavigationRequest({ url }));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async fetch(options = {}) {
|
|
||||||
return await this._wrapApiCall(async () => {
|
|
||||||
return await this._context.request._innerFetch({ request: this.request(), data: options.postData, ...options });
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async fulfill(options = {}) {
|
|
||||||
await this._handleRoute(async () => {
|
|
||||||
await this._wrapApiCall(async () => {
|
|
||||||
await this._innerFulfill(options);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async _handleRoute(callback) {
|
|
||||||
this._checkNotHandled();
|
|
||||||
try {
|
|
||||||
await callback();
|
|
||||||
this._reportHandled(true);
|
|
||||||
} catch (e) {
|
|
||||||
this._didThrow = true;
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
async _innerFulfill(options = {}) {
|
|
||||||
let fetchResponseUid;
|
|
||||||
let { status: statusOption, headers: headersOption, body } = options;
|
|
||||||
if (options.json !== void 0) {
|
|
||||||
(0, import_assert.assert)(options.body === void 0, "Can specify either body or json parameters");
|
|
||||||
body = JSON.stringify(options.json);
|
|
||||||
}
|
|
||||||
if (options.response instanceof import_fetch.APIResponse) {
|
|
||||||
statusOption ??= options.response.status();
|
|
||||||
headersOption ??= options.response.headers();
|
|
||||||
if (body === void 0 && options.path === void 0) {
|
|
||||||
if (options.response._request._connection === this._connection)
|
|
||||||
fetchResponseUid = options.response._fetchUid();
|
|
||||||
else
|
|
||||||
body = await options.response.body();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let isBase64 = false;
|
|
||||||
let length = 0;
|
|
||||||
if (options.path) {
|
|
||||||
const buffer = await this._platform.fs().promises.readFile(options.path);
|
|
||||||
body = buffer.toString("base64");
|
|
||||||
isBase64 = true;
|
|
||||||
length = buffer.length;
|
|
||||||
} else if ((0, import_rtti.isString)(body)) {
|
|
||||||
isBase64 = false;
|
|
||||||
length = Buffer.byteLength(body);
|
|
||||||
} else if (body) {
|
|
||||||
length = body.length;
|
|
||||||
body = body.toString("base64");
|
|
||||||
isBase64 = true;
|
|
||||||
}
|
|
||||||
const headers = {};
|
|
||||||
for (const header of Object.keys(headersOption || {}))
|
|
||||||
headers[header.toLowerCase()] = String(headersOption[header]);
|
|
||||||
if (options.contentType)
|
|
||||||
headers["content-type"] = String(options.contentType);
|
|
||||||
else if (options.json)
|
|
||||||
headers["content-type"] = "application/json";
|
|
||||||
else if (options.path)
|
|
||||||
headers["content-type"] = (0, import_mimeType.getMimeTypeForPath)(options.path) || "application/octet-stream";
|
|
||||||
if (length && !("content-length" in headers))
|
|
||||||
headers["content-length"] = String(length);
|
|
||||||
await this._raceWithTargetClose(this._channel.fulfill({
|
|
||||||
status: statusOption || 200,
|
|
||||||
headers: (0, import_headers.headersObjectToArray)(headers),
|
|
||||||
body,
|
|
||||||
isBase64,
|
|
||||||
fetchResponseUid
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
async continue(options = {}) {
|
|
||||||
await this._handleRoute(async () => {
|
|
||||||
this.request()._applyFallbackOverrides(options);
|
|
||||||
await this._innerContinue(
|
|
||||||
false
|
|
||||||
/* isFallback */
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
_checkNotHandled() {
|
|
||||||
if (!this._handlingPromise)
|
|
||||||
throw new Error("Route is already handled!");
|
|
||||||
}
|
|
||||||
_reportHandled(done) {
|
|
||||||
const chain = this._handlingPromise;
|
|
||||||
this._handlingPromise = null;
|
|
||||||
chain.resolve(done);
|
|
||||||
}
|
|
||||||
async _innerContinue(isFallback) {
|
|
||||||
const options = this.request()._fallbackOverridesForContinue();
|
|
||||||
return await this._raceWithTargetClose(this._channel.continue({
|
|
||||||
url: options.url,
|
|
||||||
method: options.method,
|
|
||||||
headers: options.headers ? (0, import_headers.headersObjectToArray)(options.headers) : void 0,
|
|
||||||
postData: options.postDataBuffer,
|
|
||||||
isFallback
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
class WebSocketRoute extends import_channelOwner.ChannelOwner {
|
|
||||||
constructor(parent, type, guid, initializer) {
|
|
||||||
super(parent, type, guid, initializer);
|
|
||||||
this._connected = false;
|
|
||||||
this.markAsInternalType();
|
|
||||||
this._server = {
|
|
||||||
onMessage: (handler) => {
|
|
||||||
this._onServerMessage = handler;
|
|
||||||
},
|
|
||||||
onClose: (handler) => {
|
|
||||||
this._onServerClose = handler;
|
|
||||||
},
|
|
||||||
connectToServer: () => {
|
|
||||||
throw new Error(`connectToServer must be called on the page-side WebSocketRoute`);
|
|
||||||
},
|
|
||||||
url: () => {
|
|
||||||
return this._initializer.url;
|
|
||||||
},
|
|
||||||
close: async (options = {}) => {
|
|
||||||
await this._channel.closeServer({ ...options, wasClean: true }).catch(() => {
|
|
||||||
});
|
|
||||||
},
|
|
||||||
send: (message) => {
|
|
||||||
if ((0, import_rtti.isString)(message))
|
|
||||||
this._channel.sendToServer({ message, isBase64: false }).catch(() => {
|
|
||||||
});
|
|
||||||
else
|
|
||||||
this._channel.sendToServer({ message: message.toString("base64"), isBase64: true }).catch(() => {
|
|
||||||
});
|
|
||||||
},
|
|
||||||
async [Symbol.asyncDispose]() {
|
|
||||||
await this.close();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
this._channel.on("messageFromPage", ({ message, isBase64 }) => {
|
|
||||||
if (this._onPageMessage)
|
|
||||||
this._onPageMessage(isBase64 ? Buffer.from(message, "base64") : message);
|
|
||||||
else if (this._connected)
|
|
||||||
this._channel.sendToServer({ message, isBase64 }).catch(() => {
|
|
||||||
});
|
|
||||||
});
|
|
||||||
this._channel.on("messageFromServer", ({ message, isBase64 }) => {
|
|
||||||
if (this._onServerMessage)
|
|
||||||
this._onServerMessage(isBase64 ? Buffer.from(message, "base64") : message);
|
|
||||||
else
|
|
||||||
this._channel.sendToPage({ message, isBase64 }).catch(() => {
|
|
||||||
});
|
|
||||||
});
|
|
||||||
this._channel.on("closePage", ({ code, reason, wasClean }) => {
|
|
||||||
if (this._onPageClose)
|
|
||||||
this._onPageClose(code, reason);
|
|
||||||
else
|
|
||||||
this._channel.closeServer({ code, reason, wasClean }).catch(() => {
|
|
||||||
});
|
|
||||||
});
|
|
||||||
this._channel.on("closeServer", ({ code, reason, wasClean }) => {
|
|
||||||
if (this._onServerClose)
|
|
||||||
this._onServerClose(code, reason);
|
|
||||||
else
|
|
||||||
this._channel.closePage({ code, reason, wasClean }).catch(() => {
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
static from(route) {
|
|
||||||
return route._object;
|
|
||||||
}
|
|
||||||
url() {
|
|
||||||
return this._initializer.url;
|
|
||||||
}
|
|
||||||
async close(options = {}) {
|
|
||||||
await this._channel.closePage({ ...options, wasClean: true }).catch(() => {
|
|
||||||
});
|
|
||||||
}
|
|
||||||
connectToServer() {
|
|
||||||
if (this._connected)
|
|
||||||
throw new Error("Already connected to the server");
|
|
||||||
this._connected = true;
|
|
||||||
this._channel.connect().catch(() => {
|
|
||||||
});
|
|
||||||
return this._server;
|
|
||||||
}
|
|
||||||
send(message) {
|
|
||||||
if ((0, import_rtti.isString)(message))
|
|
||||||
this._channel.sendToPage({ message, isBase64: false }).catch(() => {
|
|
||||||
});
|
|
||||||
else
|
|
||||||
this._channel.sendToPage({ message: message.toString("base64"), isBase64: true }).catch(() => {
|
|
||||||
});
|
|
||||||
}
|
|
||||||
onMessage(handler) {
|
|
||||||
this._onPageMessage = handler;
|
|
||||||
}
|
|
||||||
onClose(handler) {
|
|
||||||
this._onPageClose = handler;
|
|
||||||
}
|
|
||||||
async [Symbol.asyncDispose]() {
|
|
||||||
await this.close();
|
|
||||||
}
|
|
||||||
async _afterHandle() {
|
|
||||||
if (this._connected)
|
|
||||||
return;
|
|
||||||
await this._channel.ensureOpened();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
class WebSocketRouteHandler {
|
|
||||||
constructor(baseURL, url, handler) {
|
|
||||||
this._baseURL = baseURL;
|
|
||||||
this.url = url;
|
|
||||||
this.handler = handler;
|
|
||||||
}
|
|
||||||
static prepareInterceptionPatterns(handlers) {
|
|
||||||
const patterns = [];
|
|
||||||
let all = false;
|
|
||||||
for (const handler of handlers) {
|
|
||||||
if ((0, import_rtti.isString)(handler.url))
|
|
||||||
patterns.push({ glob: handler.url });
|
|
||||||
else if ((0, import_rtti.isRegExp)(handler.url))
|
|
||||||
patterns.push({ regexSource: handler.url.source, regexFlags: handler.url.flags });
|
|
||||||
else
|
|
||||||
all = true;
|
|
||||||
}
|
|
||||||
if (all)
|
|
||||||
return [{ glob: "**/*" }];
|
|
||||||
return patterns;
|
|
||||||
}
|
|
||||||
matches(wsURL) {
|
|
||||||
return (0, import_urlMatch.urlMatches)(this._baseURL, wsURL, this.url, true);
|
|
||||||
}
|
|
||||||
async handle(webSocketRoute) {
|
|
||||||
const handler = this.handler;
|
|
||||||
await handler(webSocketRoute);
|
|
||||||
await webSocketRoute._afterHandle();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
class Response extends import_channelOwner.ChannelOwner {
|
|
||||||
constructor(parent, type, guid, initializer) {
|
|
||||||
super(parent, type, guid, initializer);
|
|
||||||
this._finishedPromise = new import_manualPromise.ManualPromise();
|
|
||||||
this.markAsInternalType();
|
|
||||||
this._provisionalHeaders = new RawHeaders(initializer.headers);
|
|
||||||
this._request = Request.from(this._initializer.request);
|
|
||||||
Object.assign(this._request._timing, this._initializer.timing);
|
|
||||||
}
|
|
||||||
static from(response) {
|
|
||||||
return response._object;
|
|
||||||
}
|
|
||||||
static fromNullable(response) {
|
|
||||||
return response ? Response.from(response) : null;
|
|
||||||
}
|
|
||||||
url() {
|
|
||||||
return this._initializer.url;
|
|
||||||
}
|
|
||||||
ok() {
|
|
||||||
return this._initializer.status === 0 || this._initializer.status >= 200 && this._initializer.status <= 299;
|
|
||||||
}
|
|
||||||
status() {
|
|
||||||
return this._initializer.status;
|
|
||||||
}
|
|
||||||
statusText() {
|
|
||||||
return this._initializer.statusText;
|
|
||||||
}
|
|
||||||
fromServiceWorker() {
|
|
||||||
return this._initializer.fromServiceWorker;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* @deprecated
|
|
||||||
*/
|
|
||||||
headers() {
|
|
||||||
return this._provisionalHeaders.headers();
|
|
||||||
}
|
|
||||||
async _actualHeaders() {
|
|
||||||
if (!this._actualHeadersPromise) {
|
|
||||||
this._actualHeadersPromise = (async () => {
|
|
||||||
return new RawHeaders((await this._channel.rawResponseHeaders()).headers);
|
|
||||||
})();
|
|
||||||
}
|
|
||||||
return await this._actualHeadersPromise;
|
|
||||||
}
|
|
||||||
async allHeaders() {
|
|
||||||
return (await this._actualHeaders()).headers();
|
|
||||||
}
|
|
||||||
async headersArray() {
|
|
||||||
return (await this._actualHeaders()).headersArray().slice();
|
|
||||||
}
|
|
||||||
async headerValue(name) {
|
|
||||||
return (await this._actualHeaders()).get(name);
|
|
||||||
}
|
|
||||||
async headerValues(name) {
|
|
||||||
return (await this._actualHeaders()).getAll(name);
|
|
||||||
}
|
|
||||||
async finished() {
|
|
||||||
return await this.request()._targetClosedScope().race(this._finishedPromise);
|
|
||||||
}
|
|
||||||
async body() {
|
|
||||||
return (await this._channel.body()).binary;
|
|
||||||
}
|
|
||||||
async text() {
|
|
||||||
const content = await this.body();
|
|
||||||
return content.toString("utf8");
|
|
||||||
}
|
|
||||||
async json() {
|
|
||||||
const content = await this.text();
|
|
||||||
return JSON.parse(content);
|
|
||||||
}
|
|
||||||
request() {
|
|
||||||
return this._request;
|
|
||||||
}
|
|
||||||
frame() {
|
|
||||||
return this._request.frame();
|
|
||||||
}
|
|
||||||
async serverAddr() {
|
|
||||||
return (await this._channel.serverAddr()).value || null;
|
|
||||||
}
|
|
||||||
async securityDetails() {
|
|
||||||
return (await this._channel.securityDetails()).value || null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
class WebSocket extends import_channelOwner.ChannelOwner {
|
|
||||||
static from(webSocket) {
|
|
||||||
return webSocket._object;
|
|
||||||
}
|
|
||||||
constructor(parent, type, guid, initializer) {
|
|
||||||
super(parent, type, guid, initializer);
|
|
||||||
this._isClosed = false;
|
|
||||||
this._page = parent;
|
|
||||||
this._channel.on("frameSent", (event) => {
|
|
||||||
if (event.opcode === 1)
|
|
||||||
this.emit(import_events.Events.WebSocket.FrameSent, { payload: event.data });
|
|
||||||
else if (event.opcode === 2)
|
|
||||||
this.emit(import_events.Events.WebSocket.FrameSent, { payload: Buffer.from(event.data, "base64") });
|
|
||||||
});
|
|
||||||
this._channel.on("frameReceived", (event) => {
|
|
||||||
if (event.opcode === 1)
|
|
||||||
this.emit(import_events.Events.WebSocket.FrameReceived, { payload: event.data });
|
|
||||||
else if (event.opcode === 2)
|
|
||||||
this.emit(import_events.Events.WebSocket.FrameReceived, { payload: Buffer.from(event.data, "base64") });
|
|
||||||
});
|
|
||||||
this._channel.on("socketError", ({ error }) => this.emit(import_events.Events.WebSocket.Error, error));
|
|
||||||
this._channel.on("close", () => {
|
|
||||||
this._isClosed = true;
|
|
||||||
this.emit(import_events.Events.WebSocket.Close, this);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
url() {
|
|
||||||
return this._initializer.url;
|
|
||||||
}
|
|
||||||
isClosed() {
|
|
||||||
return this._isClosed;
|
|
||||||
}
|
|
||||||
async waitForEvent(event, optionsOrPredicate = {}) {
|
|
||||||
return await this._wrapApiCall(async () => {
|
|
||||||
const timeout = this._page._timeoutSettings.timeout(typeof optionsOrPredicate === "function" ? {} : optionsOrPredicate);
|
|
||||||
const predicate = typeof optionsOrPredicate === "function" ? optionsOrPredicate : optionsOrPredicate.predicate;
|
|
||||||
const waiter = import_waiter.Waiter.createForEvent(this, event);
|
|
||||||
waiter.rejectOnTimeout(timeout, `Timeout ${timeout}ms exceeded while waiting for event "${event}"`);
|
|
||||||
if (event !== import_events.Events.WebSocket.Error)
|
|
||||||
waiter.rejectOnEvent(this, import_events.Events.WebSocket.Error, new Error("Socket error"));
|
|
||||||
if (event !== import_events.Events.WebSocket.Close)
|
|
||||||
waiter.rejectOnEvent(this, import_events.Events.WebSocket.Close, new Error("Socket closed"));
|
|
||||||
waiter.rejectOnEvent(this._page, import_events.Events.Page.Close, () => this._page._closeErrorWithReason());
|
|
||||||
const result = await waiter.waitForEvent(this, event, predicate);
|
|
||||||
waiter.dispose();
|
|
||||||
return result;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function validateHeaders(headers) {
|
|
||||||
for (const key of Object.keys(headers)) {
|
|
||||||
const value = headers[key];
|
|
||||||
if (!Object.is(value, void 0) && !(0, import_rtti.isString)(value))
|
|
||||||
throw new Error(`Expected value of header "${key}" to be String, but "${typeof value}" is found.`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
class RouteHandler {
|
|
||||||
constructor(platform, baseURL, url, handler, times = Number.MAX_SAFE_INTEGER) {
|
|
||||||
this.handledCount = 0;
|
|
||||||
this._ignoreException = false;
|
|
||||||
this._activeInvocations = /* @__PURE__ */ new Set();
|
|
||||||
this._baseURL = baseURL;
|
|
||||||
this._times = times;
|
|
||||||
this.url = url;
|
|
||||||
this.handler = handler;
|
|
||||||
this._savedZone = platform.zones.current().pop();
|
|
||||||
}
|
|
||||||
static prepareInterceptionPatterns(handlers) {
|
|
||||||
const patterns = [];
|
|
||||||
let all = false;
|
|
||||||
for (const handler of handlers) {
|
|
||||||
if ((0, import_rtti.isString)(handler.url))
|
|
||||||
patterns.push({ glob: handler.url });
|
|
||||||
else if ((0, import_rtti.isRegExp)(handler.url))
|
|
||||||
patterns.push({ regexSource: handler.url.source, regexFlags: handler.url.flags });
|
|
||||||
else
|
|
||||||
all = true;
|
|
||||||
}
|
|
||||||
if (all)
|
|
||||||
return [{ glob: "**/*" }];
|
|
||||||
return patterns;
|
|
||||||
}
|
|
||||||
matches(requestURL) {
|
|
||||||
return (0, import_urlMatch.urlMatches)(this._baseURL, requestURL, this.url);
|
|
||||||
}
|
|
||||||
async handle(route) {
|
|
||||||
return await this._savedZone.run(async () => this._handleImpl(route));
|
|
||||||
}
|
|
||||||
async _handleImpl(route) {
|
|
||||||
const handlerInvocation = { complete: new import_manualPromise.ManualPromise(), route };
|
|
||||||
this._activeInvocations.add(handlerInvocation);
|
|
||||||
try {
|
|
||||||
return await this._handleInternal(route);
|
|
||||||
} catch (e) {
|
|
||||||
if (this._ignoreException)
|
|
||||||
return false;
|
|
||||||
if ((0, import_errors.isTargetClosedError)(e)) {
|
|
||||||
(0, import_stackTrace.rewriteErrorMessage)(e, `"${e.message}" while running route callback.
|
|
||||||
Consider awaiting \`await page.unrouteAll({ behavior: 'ignoreErrors' })\`
|
|
||||||
before the end of the test to ignore remaining routes in flight.`);
|
|
||||||
}
|
|
||||||
throw e;
|
|
||||||
} finally {
|
|
||||||
handlerInvocation.complete.resolve();
|
|
||||||
this._activeInvocations.delete(handlerInvocation);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
async stop(behavior) {
|
|
||||||
if (behavior === "ignoreErrors") {
|
|
||||||
this._ignoreException = true;
|
|
||||||
} else {
|
|
||||||
const promises = [];
|
|
||||||
for (const activation of this._activeInvocations) {
|
|
||||||
if (!activation.route._didThrow)
|
|
||||||
promises.push(activation.complete);
|
|
||||||
}
|
|
||||||
await Promise.all(promises);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
async _handleInternal(route) {
|
|
||||||
++this.handledCount;
|
|
||||||
const handledPromise = route._startHandling();
|
|
||||||
const handler = this.handler;
|
|
||||||
const [handled] = await Promise.all([
|
|
||||||
handledPromise,
|
|
||||||
handler(route, route.request())
|
|
||||||
]);
|
|
||||||
return handled;
|
|
||||||
}
|
|
||||||
willExpire() {
|
|
||||||
return this.handledCount + 1 >= this._times;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
class RawHeaders {
|
|
||||||
constructor(headers) {
|
|
||||||
this._headersMap = new import_multimap.MultiMap();
|
|
||||||
this._headersArray = headers;
|
|
||||||
for (const header of headers)
|
|
||||||
this._headersMap.set(header.name.toLowerCase(), header.value);
|
|
||||||
}
|
|
||||||
static _fromHeadersObjectLossy(headers) {
|
|
||||||
const headersArray = Object.entries(headers).map(([name, value]) => ({
|
|
||||||
name,
|
|
||||||
value
|
|
||||||
})).filter((header) => header.value !== void 0);
|
|
||||||
return new RawHeaders(headersArray);
|
|
||||||
}
|
|
||||||
get(name) {
|
|
||||||
const values = this.getAll(name);
|
|
||||||
if (!values || !values.length)
|
|
||||||
return null;
|
|
||||||
return values.join(name.toLowerCase() === "set-cookie" ? "\n" : ", ");
|
|
||||||
}
|
|
||||||
getAll(name) {
|
|
||||||
return [...this._headersMap.get(name.toLowerCase())];
|
|
||||||
}
|
|
||||||
headers() {
|
|
||||||
const result = {};
|
|
||||||
for (const name of this._headersMap.keys())
|
|
||||||
result[name] = this.get(name);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
headersArray() {
|
|
||||||
return this._headersArray;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
RawHeaders,
|
|
||||||
Request,
|
|
||||||
Response,
|
|
||||||
Route,
|
|
||||||
RouteHandler,
|
|
||||||
WebSocket,
|
|
||||||
WebSocketRoute,
|
|
||||||
WebSocketRouteHandler,
|
|
||||||
validateHeaders
|
|
||||||
});
|
|
||||||
709
tvapp2/node_modules/playwright-core/lib/client/page.js
generated
vendored
709
tvapp2/node_modules/playwright-core/lib/client/page.js
generated
vendored
@@ -1,709 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var page_exports = {};
|
|
||||||
__export(page_exports, {
|
|
||||||
BindingCall: () => BindingCall,
|
|
||||||
Page: () => Page
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(page_exports);
|
|
||||||
var import_accessibility = require("./accessibility");
|
|
||||||
var import_artifact = require("./artifact");
|
|
||||||
var import_channelOwner = require("./channelOwner");
|
|
||||||
var import_clientHelper = require("./clientHelper");
|
|
||||||
var import_coverage = require("./coverage");
|
|
||||||
var import_download = require("./download");
|
|
||||||
var import_elementHandle = require("./elementHandle");
|
|
||||||
var import_errors = require("./errors");
|
|
||||||
var import_events = require("./events");
|
|
||||||
var import_fileChooser = require("./fileChooser");
|
|
||||||
var import_frame = require("./frame");
|
|
||||||
var import_harRouter = require("./harRouter");
|
|
||||||
var import_input = require("./input");
|
|
||||||
var import_jsHandle = require("./jsHandle");
|
|
||||||
var import_network = require("./network");
|
|
||||||
var import_video = require("./video");
|
|
||||||
var import_waiter = require("./waiter");
|
|
||||||
var import_worker = require("./worker");
|
|
||||||
var import_timeoutSettings = require("./timeoutSettings");
|
|
||||||
var import_assert = require("../utils/isomorphic/assert");
|
|
||||||
var import_fileUtils = require("./fileUtils");
|
|
||||||
var import_headers = require("../utils/isomorphic/headers");
|
|
||||||
var import_stringUtils = require("../utils/isomorphic/stringUtils");
|
|
||||||
var import_urlMatch = require("../utils/isomorphic/urlMatch");
|
|
||||||
var import_manualPromise = require("../utils/isomorphic/manualPromise");
|
|
||||||
var import_rtti = require("../utils/isomorphic/rtti");
|
|
||||||
class Page extends import_channelOwner.ChannelOwner {
|
|
||||||
constructor(parent, type, guid, initializer) {
|
|
||||||
super(parent, type, guid, initializer);
|
|
||||||
this._frames = /* @__PURE__ */ new Set();
|
|
||||||
this._workers = /* @__PURE__ */ new Set();
|
|
||||||
this._closed = false;
|
|
||||||
this._closedOrCrashedScope = new import_manualPromise.LongStandingScope();
|
|
||||||
this._routes = [];
|
|
||||||
this._webSocketRoutes = [];
|
|
||||||
this._bindings = /* @__PURE__ */ new Map();
|
|
||||||
this._video = null;
|
|
||||||
this._closeWasCalled = false;
|
|
||||||
this._harRouters = [];
|
|
||||||
this._locatorHandlers = /* @__PURE__ */ new Map();
|
|
||||||
this._browserContext = parent;
|
|
||||||
this._timeoutSettings = new import_timeoutSettings.TimeoutSettings(this._platform, this._browserContext._timeoutSettings);
|
|
||||||
this.accessibility = new import_accessibility.Accessibility(this._channel);
|
|
||||||
this.keyboard = new import_input.Keyboard(this);
|
|
||||||
this.mouse = new import_input.Mouse(this);
|
|
||||||
this.request = this._browserContext.request;
|
|
||||||
this.touchscreen = new import_input.Touchscreen(this);
|
|
||||||
this.clock = this._browserContext.clock;
|
|
||||||
this._mainFrame = import_frame.Frame.from(initializer.mainFrame);
|
|
||||||
this._mainFrame._page = this;
|
|
||||||
this._frames.add(this._mainFrame);
|
|
||||||
this._viewportSize = initializer.viewportSize || null;
|
|
||||||
this._closed = initializer.isClosed;
|
|
||||||
this._opener = Page.fromNullable(initializer.opener);
|
|
||||||
this._channel.on("bindingCall", ({ binding }) => this._onBinding(BindingCall.from(binding)));
|
|
||||||
this._channel.on("close", () => this._onClose());
|
|
||||||
this._channel.on("crash", () => this._onCrash());
|
|
||||||
this._channel.on("download", ({ url, suggestedFilename, artifact }) => {
|
|
||||||
const artifactObject = import_artifact.Artifact.from(artifact);
|
|
||||||
this.emit(import_events.Events.Page.Download, new import_download.Download(this, url, suggestedFilename, artifactObject));
|
|
||||||
});
|
|
||||||
this._channel.on("fileChooser", ({ element, isMultiple }) => this.emit(import_events.Events.Page.FileChooser, new import_fileChooser.FileChooser(this, import_elementHandle.ElementHandle.from(element), isMultiple)));
|
|
||||||
this._channel.on("frameAttached", ({ frame }) => this._onFrameAttached(import_frame.Frame.from(frame)));
|
|
||||||
this._channel.on("frameDetached", ({ frame }) => this._onFrameDetached(import_frame.Frame.from(frame)));
|
|
||||||
this._channel.on("locatorHandlerTriggered", ({ uid }) => this._onLocatorHandlerTriggered(uid));
|
|
||||||
this._channel.on("route", ({ route }) => this._onRoute(import_network.Route.from(route)));
|
|
||||||
this._channel.on("webSocketRoute", ({ webSocketRoute }) => this._onWebSocketRoute(import_network.WebSocketRoute.from(webSocketRoute)));
|
|
||||||
this._channel.on("video", ({ artifact }) => {
|
|
||||||
const artifactObject = import_artifact.Artifact.from(artifact);
|
|
||||||
this._forceVideo()._artifactReady(artifactObject);
|
|
||||||
});
|
|
||||||
this._channel.on("webSocket", ({ webSocket }) => this.emit(import_events.Events.Page.WebSocket, import_network.WebSocket.from(webSocket)));
|
|
||||||
this._channel.on("worker", ({ worker }) => this._onWorker(import_worker.Worker.from(worker)));
|
|
||||||
this.coverage = new import_coverage.Coverage(this._channel);
|
|
||||||
this.once(import_events.Events.Page.Close, () => this._closedOrCrashedScope.close(this._closeErrorWithReason()));
|
|
||||||
this.once(import_events.Events.Page.Crash, () => this._closedOrCrashedScope.close(new import_errors.TargetClosedError()));
|
|
||||||
this._setEventToSubscriptionMapping(/* @__PURE__ */ new Map([
|
|
||||||
[import_events.Events.Page.Console, "console"],
|
|
||||||
[import_events.Events.Page.Dialog, "dialog"],
|
|
||||||
[import_events.Events.Page.Request, "request"],
|
|
||||||
[import_events.Events.Page.Response, "response"],
|
|
||||||
[import_events.Events.Page.RequestFinished, "requestFinished"],
|
|
||||||
[import_events.Events.Page.RequestFailed, "requestFailed"],
|
|
||||||
[import_events.Events.Page.FileChooser, "fileChooser"]
|
|
||||||
]));
|
|
||||||
}
|
|
||||||
static from(page) {
|
|
||||||
return page._object;
|
|
||||||
}
|
|
||||||
static fromNullable(page) {
|
|
||||||
return page ? Page.from(page) : null;
|
|
||||||
}
|
|
||||||
_onFrameAttached(frame) {
|
|
||||||
frame._page = this;
|
|
||||||
this._frames.add(frame);
|
|
||||||
if (frame._parentFrame)
|
|
||||||
frame._parentFrame._childFrames.add(frame);
|
|
||||||
this.emit(import_events.Events.Page.FrameAttached, frame);
|
|
||||||
}
|
|
||||||
_onFrameDetached(frame) {
|
|
||||||
this._frames.delete(frame);
|
|
||||||
frame._detached = true;
|
|
||||||
if (frame._parentFrame)
|
|
||||||
frame._parentFrame._childFrames.delete(frame);
|
|
||||||
this.emit(import_events.Events.Page.FrameDetached, frame);
|
|
||||||
}
|
|
||||||
async _onRoute(route) {
|
|
||||||
route._context = this.context();
|
|
||||||
const routeHandlers = this._routes.slice();
|
|
||||||
for (const routeHandler of routeHandlers) {
|
|
||||||
if (this._closeWasCalled || this._browserContext._closeWasCalled)
|
|
||||||
return;
|
|
||||||
if (!routeHandler.matches(route.request().url()))
|
|
||||||
continue;
|
|
||||||
const index = this._routes.indexOf(routeHandler);
|
|
||||||
if (index === -1)
|
|
||||||
continue;
|
|
||||||
if (routeHandler.willExpire())
|
|
||||||
this._routes.splice(index, 1);
|
|
||||||
const handled = await routeHandler.handle(route);
|
|
||||||
if (!this._routes.length)
|
|
||||||
this._wrapApiCall(() => this._updateInterceptionPatterns(), true).catch(() => {
|
|
||||||
});
|
|
||||||
if (handled)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
await this._browserContext._onRoute(route);
|
|
||||||
}
|
|
||||||
async _onWebSocketRoute(webSocketRoute) {
|
|
||||||
const routeHandler = this._webSocketRoutes.find((route) => route.matches(webSocketRoute.url()));
|
|
||||||
if (routeHandler)
|
|
||||||
await routeHandler.handle(webSocketRoute);
|
|
||||||
else
|
|
||||||
await this._browserContext._onWebSocketRoute(webSocketRoute);
|
|
||||||
}
|
|
||||||
async _onBinding(bindingCall) {
|
|
||||||
const func = this._bindings.get(bindingCall._initializer.name);
|
|
||||||
if (func) {
|
|
||||||
await bindingCall.call(func);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
await this._browserContext._onBinding(bindingCall);
|
|
||||||
}
|
|
||||||
_onWorker(worker) {
|
|
||||||
this._workers.add(worker);
|
|
||||||
worker._page = this;
|
|
||||||
this.emit(import_events.Events.Page.Worker, worker);
|
|
||||||
}
|
|
||||||
_onClose() {
|
|
||||||
this._closed = true;
|
|
||||||
this._browserContext._pages.delete(this);
|
|
||||||
this._browserContext._backgroundPages.delete(this);
|
|
||||||
this._disposeHarRouters();
|
|
||||||
this.emit(import_events.Events.Page.Close, this);
|
|
||||||
}
|
|
||||||
_onCrash() {
|
|
||||||
this.emit(import_events.Events.Page.Crash, this);
|
|
||||||
}
|
|
||||||
context() {
|
|
||||||
return this._browserContext;
|
|
||||||
}
|
|
||||||
async opener() {
|
|
||||||
if (!this._opener || this._opener.isClosed())
|
|
||||||
return null;
|
|
||||||
return this._opener;
|
|
||||||
}
|
|
||||||
mainFrame() {
|
|
||||||
return this._mainFrame;
|
|
||||||
}
|
|
||||||
frame(frameSelector) {
|
|
||||||
const name = (0, import_rtti.isString)(frameSelector) ? frameSelector : frameSelector.name;
|
|
||||||
const url = (0, import_rtti.isObject)(frameSelector) ? frameSelector.url : void 0;
|
|
||||||
(0, import_assert.assert)(name || url, "Either name or url matcher should be specified");
|
|
||||||
return this.frames().find((f) => {
|
|
||||||
if (name)
|
|
||||||
return f.name() === name;
|
|
||||||
return (0, import_urlMatch.urlMatches)(this._browserContext._options.baseURL, f.url(), url);
|
|
||||||
}) || null;
|
|
||||||
}
|
|
||||||
frames() {
|
|
||||||
return [...this._frames];
|
|
||||||
}
|
|
||||||
setDefaultNavigationTimeout(timeout) {
|
|
||||||
this._timeoutSettings.setDefaultNavigationTimeout(timeout);
|
|
||||||
this._wrapApiCall(async () => {
|
|
||||||
await this._channel.setDefaultNavigationTimeoutNoReply({ timeout });
|
|
||||||
}, true).catch(() => {
|
|
||||||
});
|
|
||||||
}
|
|
||||||
setDefaultTimeout(timeout) {
|
|
||||||
this._timeoutSettings.setDefaultTimeout(timeout);
|
|
||||||
this._wrapApiCall(async () => {
|
|
||||||
await this._channel.setDefaultTimeoutNoReply({ timeout });
|
|
||||||
}, true).catch(() => {
|
|
||||||
});
|
|
||||||
}
|
|
||||||
_forceVideo() {
|
|
||||||
if (!this._video)
|
|
||||||
this._video = new import_video.Video(this, this._connection);
|
|
||||||
return this._video;
|
|
||||||
}
|
|
||||||
video() {
|
|
||||||
if (!this._browserContext._options.recordVideo)
|
|
||||||
return null;
|
|
||||||
return this._forceVideo();
|
|
||||||
}
|
|
||||||
async $(selector, options) {
|
|
||||||
return await this._mainFrame.$(selector, options);
|
|
||||||
}
|
|
||||||
async waitForSelector(selector, options) {
|
|
||||||
return await this._mainFrame.waitForSelector(selector, options);
|
|
||||||
}
|
|
||||||
async dispatchEvent(selector, type, eventInit, options) {
|
|
||||||
return await this._mainFrame.dispatchEvent(selector, type, eventInit, options);
|
|
||||||
}
|
|
||||||
async evaluateHandle(pageFunction, arg) {
|
|
||||||
(0, import_jsHandle.assertMaxArguments)(arguments.length, 2);
|
|
||||||
return await this._mainFrame.evaluateHandle(pageFunction, arg);
|
|
||||||
}
|
|
||||||
async $eval(selector, pageFunction, arg) {
|
|
||||||
(0, import_jsHandle.assertMaxArguments)(arguments.length, 3);
|
|
||||||
return await this._mainFrame.$eval(selector, pageFunction, arg);
|
|
||||||
}
|
|
||||||
async $$eval(selector, pageFunction, arg) {
|
|
||||||
(0, import_jsHandle.assertMaxArguments)(arguments.length, 3);
|
|
||||||
return await this._mainFrame.$$eval(selector, pageFunction, arg);
|
|
||||||
}
|
|
||||||
async $$(selector) {
|
|
||||||
return await this._mainFrame.$$(selector);
|
|
||||||
}
|
|
||||||
async addScriptTag(options = {}) {
|
|
||||||
return await this._mainFrame.addScriptTag(options);
|
|
||||||
}
|
|
||||||
async addStyleTag(options = {}) {
|
|
||||||
return await this._mainFrame.addStyleTag(options);
|
|
||||||
}
|
|
||||||
async exposeFunction(name, callback) {
|
|
||||||
await this._channel.exposeBinding({ name });
|
|
||||||
const binding = (source, ...args) => callback(...args);
|
|
||||||
this._bindings.set(name, binding);
|
|
||||||
}
|
|
||||||
async exposeBinding(name, callback, options = {}) {
|
|
||||||
await this._channel.exposeBinding({ name, needsHandle: options.handle });
|
|
||||||
this._bindings.set(name, callback);
|
|
||||||
}
|
|
||||||
async setExtraHTTPHeaders(headers) {
|
|
||||||
(0, import_network.validateHeaders)(headers);
|
|
||||||
await this._channel.setExtraHTTPHeaders({ headers: (0, import_headers.headersObjectToArray)(headers) });
|
|
||||||
}
|
|
||||||
url() {
|
|
||||||
return this._mainFrame.url();
|
|
||||||
}
|
|
||||||
async content() {
|
|
||||||
return await this._mainFrame.content();
|
|
||||||
}
|
|
||||||
async setContent(html, options) {
|
|
||||||
return await this._mainFrame.setContent(html, options);
|
|
||||||
}
|
|
||||||
async goto(url, options) {
|
|
||||||
return await this._mainFrame.goto(url, options);
|
|
||||||
}
|
|
||||||
async reload(options = {}) {
|
|
||||||
const waitUntil = (0, import_frame.verifyLoadState)("waitUntil", options.waitUntil === void 0 ? "load" : options.waitUntil);
|
|
||||||
return import_network.Response.fromNullable((await this._channel.reload({ ...options, waitUntil })).response);
|
|
||||||
}
|
|
||||||
async addLocatorHandler(locator, handler, options = {}) {
|
|
||||||
if (locator._frame !== this._mainFrame)
|
|
||||||
throw new Error(`Locator must belong to the main frame of this page`);
|
|
||||||
if (options.times === 0)
|
|
||||||
return;
|
|
||||||
const { uid } = await this._channel.registerLocatorHandler({ selector: locator._selector, noWaitAfter: options.noWaitAfter });
|
|
||||||
this._locatorHandlers.set(uid, { locator, handler, times: options.times });
|
|
||||||
}
|
|
||||||
async _onLocatorHandlerTriggered(uid) {
|
|
||||||
let remove = false;
|
|
||||||
try {
|
|
||||||
const handler = this._locatorHandlers.get(uid);
|
|
||||||
if (handler && handler.times !== 0) {
|
|
||||||
if (handler.times !== void 0)
|
|
||||||
handler.times--;
|
|
||||||
await handler.handler(handler.locator);
|
|
||||||
}
|
|
||||||
remove = handler?.times === 0;
|
|
||||||
} finally {
|
|
||||||
if (remove)
|
|
||||||
this._locatorHandlers.delete(uid);
|
|
||||||
this._wrapApiCall(() => this._channel.resolveLocatorHandlerNoReply({ uid, remove }), true).catch(() => {
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
async removeLocatorHandler(locator) {
|
|
||||||
for (const [uid, data] of this._locatorHandlers) {
|
|
||||||
if (data.locator._equals(locator)) {
|
|
||||||
this._locatorHandlers.delete(uid);
|
|
||||||
await this._channel.unregisterLocatorHandler({ uid }).catch(() => {
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
async waitForLoadState(state, options) {
|
|
||||||
return await this._mainFrame.waitForLoadState(state, options);
|
|
||||||
}
|
|
||||||
async waitForNavigation(options) {
|
|
||||||
return await this._mainFrame.waitForNavigation(options);
|
|
||||||
}
|
|
||||||
async waitForURL(url, options) {
|
|
||||||
return await this._mainFrame.waitForURL(url, options);
|
|
||||||
}
|
|
||||||
async waitForRequest(urlOrPredicate, options = {}) {
|
|
||||||
const predicate = async (request) => {
|
|
||||||
if ((0, import_rtti.isString)(urlOrPredicate) || (0, import_rtti.isRegExp)(urlOrPredicate))
|
|
||||||
return (0, import_urlMatch.urlMatches)(this._browserContext._options.baseURL, request.url(), urlOrPredicate);
|
|
||||||
return await urlOrPredicate(request);
|
|
||||||
};
|
|
||||||
const trimmedUrl = trimUrl(urlOrPredicate);
|
|
||||||
const logLine = trimmedUrl ? `waiting for request ${trimmedUrl}` : void 0;
|
|
||||||
return await this._waitForEvent(import_events.Events.Page.Request, { predicate, timeout: options.timeout }, logLine);
|
|
||||||
}
|
|
||||||
async waitForResponse(urlOrPredicate, options = {}) {
|
|
||||||
const predicate = async (response) => {
|
|
||||||
if ((0, import_rtti.isString)(urlOrPredicate) || (0, import_rtti.isRegExp)(urlOrPredicate))
|
|
||||||
return (0, import_urlMatch.urlMatches)(this._browserContext._options.baseURL, response.url(), urlOrPredicate);
|
|
||||||
return await urlOrPredicate(response);
|
|
||||||
};
|
|
||||||
const trimmedUrl = trimUrl(urlOrPredicate);
|
|
||||||
const logLine = trimmedUrl ? `waiting for response ${trimmedUrl}` : void 0;
|
|
||||||
return await this._waitForEvent(import_events.Events.Page.Response, { predicate, timeout: options.timeout }, logLine);
|
|
||||||
}
|
|
||||||
async waitForEvent(event, optionsOrPredicate = {}) {
|
|
||||||
return await this._waitForEvent(event, optionsOrPredicate, `waiting for event "${event}"`);
|
|
||||||
}
|
|
||||||
_closeErrorWithReason() {
|
|
||||||
return new import_errors.TargetClosedError(this._closeReason || this._browserContext._effectiveCloseReason());
|
|
||||||
}
|
|
||||||
async _waitForEvent(event, optionsOrPredicate, logLine) {
|
|
||||||
return await this._wrapApiCall(async () => {
|
|
||||||
const timeout = this._timeoutSettings.timeout(typeof optionsOrPredicate === "function" ? {} : optionsOrPredicate);
|
|
||||||
const predicate = typeof optionsOrPredicate === "function" ? optionsOrPredicate : optionsOrPredicate.predicate;
|
|
||||||
const waiter = import_waiter.Waiter.createForEvent(this, event);
|
|
||||||
if (logLine)
|
|
||||||
waiter.log(logLine);
|
|
||||||
waiter.rejectOnTimeout(timeout, `Timeout ${timeout}ms exceeded while waiting for event "${event}"`);
|
|
||||||
if (event !== import_events.Events.Page.Crash)
|
|
||||||
waiter.rejectOnEvent(this, import_events.Events.Page.Crash, new Error("Page crashed"));
|
|
||||||
if (event !== import_events.Events.Page.Close)
|
|
||||||
waiter.rejectOnEvent(this, import_events.Events.Page.Close, () => this._closeErrorWithReason());
|
|
||||||
const result = await waiter.waitForEvent(this, event, predicate);
|
|
||||||
waiter.dispose();
|
|
||||||
return result;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async goBack(options = {}) {
|
|
||||||
const waitUntil = (0, import_frame.verifyLoadState)("waitUntil", options.waitUntil === void 0 ? "load" : options.waitUntil);
|
|
||||||
return import_network.Response.fromNullable((await this._channel.goBack({ ...options, waitUntil })).response);
|
|
||||||
}
|
|
||||||
async goForward(options = {}) {
|
|
||||||
const waitUntil = (0, import_frame.verifyLoadState)("waitUntil", options.waitUntil === void 0 ? "load" : options.waitUntil);
|
|
||||||
return import_network.Response.fromNullable((await this._channel.goForward({ ...options, waitUntil })).response);
|
|
||||||
}
|
|
||||||
async requestGC() {
|
|
||||||
await this._channel.requestGC();
|
|
||||||
}
|
|
||||||
async emulateMedia(options = {}) {
|
|
||||||
await this._channel.emulateMedia({
|
|
||||||
media: options.media === null ? "no-override" : options.media,
|
|
||||||
colorScheme: options.colorScheme === null ? "no-override" : options.colorScheme,
|
|
||||||
reducedMotion: options.reducedMotion === null ? "no-override" : options.reducedMotion,
|
|
||||||
forcedColors: options.forcedColors === null ? "no-override" : options.forcedColors,
|
|
||||||
contrast: options.contrast === null ? "no-override" : options.contrast
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async setViewportSize(viewportSize) {
|
|
||||||
this._viewportSize = viewportSize;
|
|
||||||
await this._channel.setViewportSize({ viewportSize });
|
|
||||||
}
|
|
||||||
viewportSize() {
|
|
||||||
return this._viewportSize;
|
|
||||||
}
|
|
||||||
async evaluate(pageFunction, arg) {
|
|
||||||
(0, import_jsHandle.assertMaxArguments)(arguments.length, 2);
|
|
||||||
return await this._mainFrame.evaluate(pageFunction, arg);
|
|
||||||
}
|
|
||||||
async addInitScript(script, arg) {
|
|
||||||
const source = await (0, import_clientHelper.evaluationScript)(this._platform, script, arg);
|
|
||||||
await this._channel.addInitScript({ source });
|
|
||||||
}
|
|
||||||
async route(url, handler, options = {}) {
|
|
||||||
this._routes.unshift(new import_network.RouteHandler(this._platform, this._browserContext._options.baseURL, url, handler, options.times));
|
|
||||||
await this._updateInterceptionPatterns();
|
|
||||||
}
|
|
||||||
async routeFromHAR(har, options = {}) {
|
|
||||||
const localUtils = this._connection.localUtils();
|
|
||||||
if (!localUtils)
|
|
||||||
throw new Error("Route from har is not supported in thin clients");
|
|
||||||
if (options.update) {
|
|
||||||
await this._browserContext._recordIntoHAR(har, this, options);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const harRouter = await import_harRouter.HarRouter.create(localUtils, har, options.notFound || "abort", { urlMatch: options.url });
|
|
||||||
this._harRouters.push(harRouter);
|
|
||||||
await harRouter.addPageRoute(this);
|
|
||||||
}
|
|
||||||
async routeWebSocket(url, handler) {
|
|
||||||
this._webSocketRoutes.unshift(new import_network.WebSocketRouteHandler(this._browserContext._options.baseURL, url, handler));
|
|
||||||
await this._updateWebSocketInterceptionPatterns();
|
|
||||||
}
|
|
||||||
_disposeHarRouters() {
|
|
||||||
this._harRouters.forEach((router) => router.dispose());
|
|
||||||
this._harRouters = [];
|
|
||||||
}
|
|
||||||
async unrouteAll(options) {
|
|
||||||
await this._unrouteInternal(this._routes, [], options?.behavior);
|
|
||||||
this._disposeHarRouters();
|
|
||||||
}
|
|
||||||
async unroute(url, handler) {
|
|
||||||
const removed = [];
|
|
||||||
const remaining = [];
|
|
||||||
for (const route of this._routes) {
|
|
||||||
if ((0, import_urlMatch.urlMatchesEqual)(route.url, url) && (!handler || route.handler === handler))
|
|
||||||
removed.push(route);
|
|
||||||
else
|
|
||||||
remaining.push(route);
|
|
||||||
}
|
|
||||||
await this._unrouteInternal(removed, remaining, "default");
|
|
||||||
}
|
|
||||||
async _unrouteInternal(removed, remaining, behavior) {
|
|
||||||
this._routes = remaining;
|
|
||||||
await this._updateInterceptionPatterns();
|
|
||||||
if (!behavior || behavior === "default")
|
|
||||||
return;
|
|
||||||
const promises = removed.map((routeHandler) => routeHandler.stop(behavior));
|
|
||||||
await Promise.all(promises);
|
|
||||||
}
|
|
||||||
async _updateInterceptionPatterns() {
|
|
||||||
const patterns = import_network.RouteHandler.prepareInterceptionPatterns(this._routes);
|
|
||||||
await this._channel.setNetworkInterceptionPatterns({ patterns });
|
|
||||||
}
|
|
||||||
async _updateWebSocketInterceptionPatterns() {
|
|
||||||
const patterns = import_network.WebSocketRouteHandler.prepareInterceptionPatterns(this._webSocketRoutes);
|
|
||||||
await this._channel.setWebSocketInterceptionPatterns({ patterns });
|
|
||||||
}
|
|
||||||
async screenshot(options = {}) {
|
|
||||||
const mask = options.mask;
|
|
||||||
const copy = { ...options, mask: void 0 };
|
|
||||||
if (!copy.type)
|
|
||||||
copy.type = (0, import_elementHandle.determineScreenshotType)(options);
|
|
||||||
if (mask) {
|
|
||||||
copy.mask = mask.map((locator) => ({
|
|
||||||
frame: locator._frame._channel,
|
|
||||||
selector: locator._selector
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
const result = await this._channel.screenshot(copy);
|
|
||||||
if (options.path) {
|
|
||||||
await (0, import_fileUtils.mkdirIfNeeded)(this._platform, options.path);
|
|
||||||
await this._platform.fs().promises.writeFile(options.path, result.binary);
|
|
||||||
}
|
|
||||||
return result.binary;
|
|
||||||
}
|
|
||||||
async _expectScreenshot(options) {
|
|
||||||
const mask = options?.mask ? options?.mask.map((locator2) => ({
|
|
||||||
frame: locator2._frame._channel,
|
|
||||||
selector: locator2._selector
|
|
||||||
})) : void 0;
|
|
||||||
const locator = options.locator ? {
|
|
||||||
frame: options.locator._frame._channel,
|
|
||||||
selector: options.locator._selector
|
|
||||||
} : void 0;
|
|
||||||
return await this._channel.expectScreenshot({
|
|
||||||
...options,
|
|
||||||
isNot: !!options.isNot,
|
|
||||||
locator,
|
|
||||||
mask
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async title() {
|
|
||||||
return await this._mainFrame.title();
|
|
||||||
}
|
|
||||||
async bringToFront() {
|
|
||||||
await this._channel.bringToFront();
|
|
||||||
}
|
|
||||||
async [Symbol.asyncDispose]() {
|
|
||||||
await this.close();
|
|
||||||
}
|
|
||||||
async close(options = {}) {
|
|
||||||
this._closeReason = options.reason;
|
|
||||||
this._closeWasCalled = true;
|
|
||||||
try {
|
|
||||||
if (this._ownedContext)
|
|
||||||
await this._ownedContext.close();
|
|
||||||
else
|
|
||||||
await this._channel.close(options);
|
|
||||||
} catch (e) {
|
|
||||||
if ((0, import_errors.isTargetClosedError)(e) && !options.runBeforeUnload)
|
|
||||||
return;
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
isClosed() {
|
|
||||||
return this._closed;
|
|
||||||
}
|
|
||||||
async click(selector, options) {
|
|
||||||
return await this._mainFrame.click(selector, options);
|
|
||||||
}
|
|
||||||
async dragAndDrop(source, target, options) {
|
|
||||||
return await this._mainFrame.dragAndDrop(source, target, options);
|
|
||||||
}
|
|
||||||
async dblclick(selector, options) {
|
|
||||||
return await this._mainFrame.dblclick(selector, options);
|
|
||||||
}
|
|
||||||
async tap(selector, options) {
|
|
||||||
return await this._mainFrame.tap(selector, options);
|
|
||||||
}
|
|
||||||
async fill(selector, value, options) {
|
|
||||||
return await this._mainFrame.fill(selector, value, options);
|
|
||||||
}
|
|
||||||
locator(selector, options) {
|
|
||||||
return this.mainFrame().locator(selector, options);
|
|
||||||
}
|
|
||||||
getByTestId(testId) {
|
|
||||||
return this.mainFrame().getByTestId(testId);
|
|
||||||
}
|
|
||||||
getByAltText(text, options) {
|
|
||||||
return this.mainFrame().getByAltText(text, options);
|
|
||||||
}
|
|
||||||
getByLabel(text, options) {
|
|
||||||
return this.mainFrame().getByLabel(text, options);
|
|
||||||
}
|
|
||||||
getByPlaceholder(text, options) {
|
|
||||||
return this.mainFrame().getByPlaceholder(text, options);
|
|
||||||
}
|
|
||||||
getByText(text, options) {
|
|
||||||
return this.mainFrame().getByText(text, options);
|
|
||||||
}
|
|
||||||
getByTitle(text, options) {
|
|
||||||
return this.mainFrame().getByTitle(text, options);
|
|
||||||
}
|
|
||||||
getByRole(role, options = {}) {
|
|
||||||
return this.mainFrame().getByRole(role, options);
|
|
||||||
}
|
|
||||||
frameLocator(selector) {
|
|
||||||
return this.mainFrame().frameLocator(selector);
|
|
||||||
}
|
|
||||||
async focus(selector, options) {
|
|
||||||
return await this._mainFrame.focus(selector, options);
|
|
||||||
}
|
|
||||||
async textContent(selector, options) {
|
|
||||||
return await this._mainFrame.textContent(selector, options);
|
|
||||||
}
|
|
||||||
async innerText(selector, options) {
|
|
||||||
return await this._mainFrame.innerText(selector, options);
|
|
||||||
}
|
|
||||||
async innerHTML(selector, options) {
|
|
||||||
return await this._mainFrame.innerHTML(selector, options);
|
|
||||||
}
|
|
||||||
async getAttribute(selector, name, options) {
|
|
||||||
return await this._mainFrame.getAttribute(selector, name, options);
|
|
||||||
}
|
|
||||||
async inputValue(selector, options) {
|
|
||||||
return await this._mainFrame.inputValue(selector, options);
|
|
||||||
}
|
|
||||||
async isChecked(selector, options) {
|
|
||||||
return await this._mainFrame.isChecked(selector, options);
|
|
||||||
}
|
|
||||||
async isDisabled(selector, options) {
|
|
||||||
return await this._mainFrame.isDisabled(selector, options);
|
|
||||||
}
|
|
||||||
async isEditable(selector, options) {
|
|
||||||
return await this._mainFrame.isEditable(selector, options);
|
|
||||||
}
|
|
||||||
async isEnabled(selector, options) {
|
|
||||||
return await this._mainFrame.isEnabled(selector, options);
|
|
||||||
}
|
|
||||||
async isHidden(selector, options) {
|
|
||||||
return await this._mainFrame.isHidden(selector, options);
|
|
||||||
}
|
|
||||||
async isVisible(selector, options) {
|
|
||||||
return await this._mainFrame.isVisible(selector, options);
|
|
||||||
}
|
|
||||||
async hover(selector, options) {
|
|
||||||
return await this._mainFrame.hover(selector, options);
|
|
||||||
}
|
|
||||||
async selectOption(selector, values, options) {
|
|
||||||
return await this._mainFrame.selectOption(selector, values, options);
|
|
||||||
}
|
|
||||||
async setInputFiles(selector, files, options) {
|
|
||||||
return await this._mainFrame.setInputFiles(selector, files, options);
|
|
||||||
}
|
|
||||||
async type(selector, text, options) {
|
|
||||||
return await this._mainFrame.type(selector, text, options);
|
|
||||||
}
|
|
||||||
async press(selector, key, options) {
|
|
||||||
return await this._mainFrame.press(selector, key, options);
|
|
||||||
}
|
|
||||||
async check(selector, options) {
|
|
||||||
return await this._mainFrame.check(selector, options);
|
|
||||||
}
|
|
||||||
async uncheck(selector, options) {
|
|
||||||
return await this._mainFrame.uncheck(selector, options);
|
|
||||||
}
|
|
||||||
async setChecked(selector, checked, options) {
|
|
||||||
return await this._mainFrame.setChecked(selector, checked, options);
|
|
||||||
}
|
|
||||||
async waitForTimeout(timeout) {
|
|
||||||
return await this._mainFrame.waitForTimeout(timeout);
|
|
||||||
}
|
|
||||||
async waitForFunction(pageFunction, arg, options) {
|
|
||||||
return await this._mainFrame.waitForFunction(pageFunction, arg, options);
|
|
||||||
}
|
|
||||||
workers() {
|
|
||||||
return [...this._workers];
|
|
||||||
}
|
|
||||||
async pause(_options) {
|
|
||||||
if (this._platform.isJSDebuggerAttached())
|
|
||||||
return;
|
|
||||||
const defaultNavigationTimeout = this._browserContext._timeoutSettings.defaultNavigationTimeout();
|
|
||||||
const defaultTimeout = this._browserContext._timeoutSettings.defaultTimeout();
|
|
||||||
this._browserContext.setDefaultNavigationTimeout(0);
|
|
||||||
this._browserContext.setDefaultTimeout(0);
|
|
||||||
this._instrumentation?.onWillPause({ keepTestTimeout: !!_options?.__testHookKeepTestTimeout });
|
|
||||||
await this._closedOrCrashedScope.safeRace(this.context()._channel.pause());
|
|
||||||
this._browserContext.setDefaultNavigationTimeout(defaultNavigationTimeout);
|
|
||||||
this._browserContext.setDefaultTimeout(defaultTimeout);
|
|
||||||
}
|
|
||||||
async pdf(options = {}) {
|
|
||||||
const transportOptions = { ...options };
|
|
||||||
if (transportOptions.margin)
|
|
||||||
transportOptions.margin = { ...transportOptions.margin };
|
|
||||||
if (typeof options.width === "number")
|
|
||||||
transportOptions.width = options.width + "px";
|
|
||||||
if (typeof options.height === "number")
|
|
||||||
transportOptions.height = options.height + "px";
|
|
||||||
for (const margin of ["top", "right", "bottom", "left"]) {
|
|
||||||
const index = margin;
|
|
||||||
if (options.margin && typeof options.margin[index] === "number")
|
|
||||||
transportOptions.margin[index] = transportOptions.margin[index] + "px";
|
|
||||||
}
|
|
||||||
const result = await this._channel.pdf(transportOptions);
|
|
||||||
if (options.path) {
|
|
||||||
const platform = this._platform;
|
|
||||||
await platform.fs().promises.mkdir(platform.path().dirname(options.path), { recursive: true });
|
|
||||||
await platform.fs().promises.writeFile(options.path, result.pdf);
|
|
||||||
}
|
|
||||||
return result.pdf;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
class BindingCall extends import_channelOwner.ChannelOwner {
|
|
||||||
static from(channel) {
|
|
||||||
return channel._object;
|
|
||||||
}
|
|
||||||
constructor(parent, type, guid, initializer) {
|
|
||||||
super(parent, type, guid, initializer);
|
|
||||||
}
|
|
||||||
async call(func) {
|
|
||||||
try {
|
|
||||||
const frame = import_frame.Frame.from(this._initializer.frame);
|
|
||||||
const source = {
|
|
||||||
context: frame._page.context(),
|
|
||||||
page: frame._page,
|
|
||||||
frame
|
|
||||||
};
|
|
||||||
let result;
|
|
||||||
if (this._initializer.handle)
|
|
||||||
result = await func(source, import_jsHandle.JSHandle.from(this._initializer.handle));
|
|
||||||
else
|
|
||||||
result = await func(source, ...this._initializer.args.map(import_jsHandle.parseResult));
|
|
||||||
this._channel.resolve({ result: (0, import_jsHandle.serializeArgument)(result) }).catch(() => {
|
|
||||||
});
|
|
||||||
} catch (e) {
|
|
||||||
this._channel.reject({ error: (0, import_errors.serializeError)(e) }).catch(() => {
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function trimUrl(param) {
|
|
||||||
if ((0, import_rtti.isRegExp)(param))
|
|
||||||
return `/${(0, import_stringUtils.trimStringWithEllipsis)(param.source, 50)}/${param.flags}`;
|
|
||||||
if ((0, import_rtti.isString)(param))
|
|
||||||
return `"${(0, import_stringUtils.trimStringWithEllipsis)(param, 50)}"`;
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
BindingCall,
|
|
||||||
Page
|
|
||||||
});
|
|
||||||
85
tvapp2/node_modules/playwright-core/lib/client/playwright.js
generated
vendored
85
tvapp2/node_modules/playwright-core/lib/client/playwright.js
generated
vendored
@@ -1,85 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var playwright_exports = {};
|
|
||||||
__export(playwright_exports, {
|
|
||||||
Playwright: () => Playwright
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(playwright_exports);
|
|
||||||
var import_android = require("./android");
|
|
||||||
var import_browser = require("./browser");
|
|
||||||
var import_browserType = require("./browserType");
|
|
||||||
var import_channelOwner = require("./channelOwner");
|
|
||||||
var import_electron = require("./electron");
|
|
||||||
var import_errors = require("./errors");
|
|
||||||
var import_fetch = require("./fetch");
|
|
||||||
var import_selectors = require("./selectors");
|
|
||||||
class Playwright extends import_channelOwner.ChannelOwner {
|
|
||||||
constructor(parent, type, guid, initializer) {
|
|
||||||
super(parent, type, guid, initializer);
|
|
||||||
this.request = new import_fetch.APIRequest(this);
|
|
||||||
this.chromium = import_browserType.BrowserType.from(initializer.chromium);
|
|
||||||
this.chromium._playwright = this;
|
|
||||||
this.firefox = import_browserType.BrowserType.from(initializer.firefox);
|
|
||||||
this.firefox._playwright = this;
|
|
||||||
this.webkit = import_browserType.BrowserType.from(initializer.webkit);
|
|
||||||
this.webkit._playwright = this;
|
|
||||||
this._android = import_android.Android.from(initializer.android);
|
|
||||||
this._electron = import_electron.Electron.from(initializer.electron);
|
|
||||||
this._bidiChromium = import_browserType.BrowserType.from(initializer.bidiChromium);
|
|
||||||
this._bidiChromium._playwright = this;
|
|
||||||
this._bidiFirefox = import_browserType.BrowserType.from(initializer.bidiFirefox);
|
|
||||||
this._bidiFirefox._playwright = this;
|
|
||||||
this.devices = this._connection.localUtils()?.devices ?? {};
|
|
||||||
this.selectors = new import_selectors.Selectors();
|
|
||||||
this.errors = { TimeoutError: import_errors.TimeoutError };
|
|
||||||
const selectorsOwner = import_selectors.SelectorsOwner.from(initializer.selectors);
|
|
||||||
this.selectors._addChannel(selectorsOwner);
|
|
||||||
this._connection.on("close", () => {
|
|
||||||
this.selectors._removeChannel(selectorsOwner);
|
|
||||||
});
|
|
||||||
global._playwrightInstance = this;
|
|
||||||
}
|
|
||||||
_setSelectors(selectors) {
|
|
||||||
const selectorsOwner = import_selectors.SelectorsOwner.from(this._initializer.selectors);
|
|
||||||
this.selectors._removeChannel(selectorsOwner);
|
|
||||||
this.selectors = selectors;
|
|
||||||
this.selectors._addChannel(selectorsOwner);
|
|
||||||
}
|
|
||||||
static from(channel) {
|
|
||||||
return channel._object;
|
|
||||||
}
|
|
||||||
_browserTypes() {
|
|
||||||
return [this.chromium, this.firefox, this.webkit, this._bidiChromium, this._bidiFirefox];
|
|
||||||
}
|
|
||||||
_preLaunchedBrowser() {
|
|
||||||
const browser = import_browser.Browser.from(this._initializer.preLaunchedBrowser);
|
|
||||||
browser._browserType = this[browser._name];
|
|
||||||
return browser;
|
|
||||||
}
|
|
||||||
_allContexts() {
|
|
||||||
return this._browserTypes().flatMap((type) => [...type._contexts]);
|
|
||||||
}
|
|
||||||
_allPages() {
|
|
||||||
return this._allContexts().flatMap((context) => context.pages());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
Playwright
|
|
||||||
});
|
|
||||||
75
tvapp2/node_modules/playwright-core/lib/client/selectors.js
generated
vendored
75
tvapp2/node_modules/playwright-core/lib/client/selectors.js
generated
vendored
@@ -1,75 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var selectors_exports = {};
|
|
||||||
__export(selectors_exports, {
|
|
||||||
Selectors: () => Selectors,
|
|
||||||
SelectorsOwner: () => SelectorsOwner,
|
|
||||||
setPlatformForSelectors: () => setPlatformForSelectors
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(selectors_exports);
|
|
||||||
var import_channelOwner = require("./channelOwner");
|
|
||||||
var import_clientHelper = require("./clientHelper");
|
|
||||||
var import_locator = require("./locator");
|
|
||||||
var import_platform = require("./platform");
|
|
||||||
let platform = import_platform.emptyPlatform;
|
|
||||||
function setPlatformForSelectors(p) {
|
|
||||||
platform = p;
|
|
||||||
}
|
|
||||||
class Selectors {
|
|
||||||
constructor() {
|
|
||||||
this._channels = /* @__PURE__ */ new Set();
|
|
||||||
this._registrations = [];
|
|
||||||
}
|
|
||||||
async register(name, script, options = {}) {
|
|
||||||
const source = await (0, import_clientHelper.evaluationScript)(platform, script, void 0, false);
|
|
||||||
const params = { ...options, name, source };
|
|
||||||
for (const channel of this._channels)
|
|
||||||
await channel._channel.register(params);
|
|
||||||
this._registrations.push(params);
|
|
||||||
}
|
|
||||||
setTestIdAttribute(attributeName) {
|
|
||||||
(0, import_locator.setTestIdAttribute)(attributeName);
|
|
||||||
for (const channel of this._channels)
|
|
||||||
channel._channel.setTestIdAttributeName({ testIdAttributeName: attributeName }).catch(() => {
|
|
||||||
});
|
|
||||||
}
|
|
||||||
_addChannel(channel) {
|
|
||||||
this._channels.add(channel);
|
|
||||||
for (const params of this._registrations) {
|
|
||||||
channel._channel.register(params).catch(() => {
|
|
||||||
});
|
|
||||||
channel._channel.setTestIdAttributeName({ testIdAttributeName: (0, import_locator.testIdAttributeName)() }).catch(() => {
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_removeChannel(channel) {
|
|
||||||
this._channels.delete(channel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
class SelectorsOwner extends import_channelOwner.ChannelOwner {
|
|
||||||
static from(browser) {
|
|
||||||
return browser._object;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
Selectors,
|
|
||||||
SelectorsOwner,
|
|
||||||
setPlatformForSelectors
|
|
||||||
});
|
|
||||||
39
tvapp2/node_modules/playwright-core/lib/client/stream.js
generated
vendored
39
tvapp2/node_modules/playwright-core/lib/client/stream.js
generated
vendored
@@ -1,39 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var stream_exports = {};
|
|
||||||
__export(stream_exports, {
|
|
||||||
Stream: () => Stream
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(stream_exports);
|
|
||||||
var import_channelOwner = require("./channelOwner");
|
|
||||||
class Stream extends import_channelOwner.ChannelOwner {
|
|
||||||
static from(Stream2) {
|
|
||||||
return Stream2._object;
|
|
||||||
}
|
|
||||||
constructor(parent, type, guid, initializer) {
|
|
||||||
super(parent, type, guid, initializer);
|
|
||||||
}
|
|
||||||
stream() {
|
|
||||||
return this._platform.streamReadable(this._channel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
Stream
|
|
||||||
});
|
|
||||||
114
tvapp2/node_modules/playwright-core/lib/client/tracing.js
generated
vendored
114
tvapp2/node_modules/playwright-core/lib/client/tracing.js
generated
vendored
@@ -1,114 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var tracing_exports = {};
|
|
||||||
__export(tracing_exports, {
|
|
||||||
Tracing: () => Tracing
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(tracing_exports);
|
|
||||||
var import_artifact = require("./artifact");
|
|
||||||
var import_channelOwner = require("./channelOwner");
|
|
||||||
class Tracing extends import_channelOwner.ChannelOwner {
|
|
||||||
constructor(parent, type, guid, initializer) {
|
|
||||||
super(parent, type, guid, initializer);
|
|
||||||
this._includeSources = false;
|
|
||||||
this._isTracing = false;
|
|
||||||
this.markAsInternalType();
|
|
||||||
}
|
|
||||||
static from(channel) {
|
|
||||||
return channel._object;
|
|
||||||
}
|
|
||||||
async start(options = {}) {
|
|
||||||
this._includeSources = !!options.sources;
|
|
||||||
await this._channel.tracingStart({
|
|
||||||
name: options.name,
|
|
||||||
snapshots: options.snapshots,
|
|
||||||
screenshots: options.screenshots,
|
|
||||||
live: options._live
|
|
||||||
});
|
|
||||||
const { traceName } = await this._channel.tracingStartChunk({ name: options.name, title: options.title });
|
|
||||||
await this._startCollectingStacks(traceName);
|
|
||||||
}
|
|
||||||
async startChunk(options = {}) {
|
|
||||||
const { traceName } = await this._channel.tracingStartChunk(options);
|
|
||||||
await this._startCollectingStacks(traceName);
|
|
||||||
}
|
|
||||||
async group(name, options = {}) {
|
|
||||||
await this._wrapApiCall(async () => {
|
|
||||||
await this._channel.tracingGroup({ name, location: options.location });
|
|
||||||
}, false);
|
|
||||||
}
|
|
||||||
async groupEnd() {
|
|
||||||
await this._wrapApiCall(async () => {
|
|
||||||
await this._channel.tracingGroupEnd();
|
|
||||||
}, false);
|
|
||||||
}
|
|
||||||
async _startCollectingStacks(traceName) {
|
|
||||||
if (!this._isTracing) {
|
|
||||||
this._isTracing = true;
|
|
||||||
this._connection.setIsTracing(true);
|
|
||||||
}
|
|
||||||
const result = await this._connection.localUtils()?.tracingStarted({ tracesDir: this._tracesDir, traceName });
|
|
||||||
this._stacksId = result?.stacksId;
|
|
||||||
}
|
|
||||||
async stopChunk(options = {}) {
|
|
||||||
await this._doStopChunk(options.path);
|
|
||||||
}
|
|
||||||
async stop(options = {}) {
|
|
||||||
await this._doStopChunk(options.path);
|
|
||||||
await this._channel.tracingStop();
|
|
||||||
}
|
|
||||||
async _doStopChunk(filePath) {
|
|
||||||
this._resetStackCounter();
|
|
||||||
if (!filePath) {
|
|
||||||
await this._channel.tracingStopChunk({ mode: "discard" });
|
|
||||||
if (this._stacksId)
|
|
||||||
await this._connection.localUtils().traceDiscarded({ stacksId: this._stacksId });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const localUtils = this._connection.localUtils();
|
|
||||||
if (!localUtils)
|
|
||||||
throw new Error("Cannot save trace in thin clients");
|
|
||||||
const isLocal = !this._connection.isRemote();
|
|
||||||
if (isLocal) {
|
|
||||||
const result2 = await this._channel.tracingStopChunk({ mode: "entries" });
|
|
||||||
await localUtils.zip({ zipFile: filePath, entries: result2.entries, mode: "write", stacksId: this._stacksId, includeSources: this._includeSources });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const result = await this._channel.tracingStopChunk({ mode: "archive" });
|
|
||||||
if (!result.artifact) {
|
|
||||||
if (this._stacksId)
|
|
||||||
await localUtils.traceDiscarded({ stacksId: this._stacksId });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const artifact = import_artifact.Artifact.from(result.artifact);
|
|
||||||
await artifact.saveAs(filePath);
|
|
||||||
await artifact.delete();
|
|
||||||
await localUtils.zip({ zipFile: filePath, entries: [], mode: "append", stacksId: this._stacksId, includeSources: this._includeSources });
|
|
||||||
}
|
|
||||||
_resetStackCounter() {
|
|
||||||
if (this._isTracing) {
|
|
||||||
this._isTracing = false;
|
|
||||||
this._connection.setIsTracing(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
Tracing
|
|
||||||
});
|
|
||||||
28
tvapp2/node_modules/playwright-core/lib/client/types.js
generated
vendored
28
tvapp2/node_modules/playwright-core/lib/client/types.js
generated
vendored
@@ -1,28 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var types_exports = {};
|
|
||||||
__export(types_exports, {
|
|
||||||
kLifecycleEvents: () => kLifecycleEvents
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(types_exports);
|
|
||||||
const kLifecycleEvents = /* @__PURE__ */ new Set(["load", "domcontentloaded", "networkidle", "commit"]);
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
kLifecycleEvents
|
|
||||||
});
|
|
||||||
59
tvapp2/node_modules/playwright-core/lib/client/video.js
generated
vendored
59
tvapp2/node_modules/playwright-core/lib/client/video.js
generated
vendored
@@ -1,59 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var video_exports = {};
|
|
||||||
__export(video_exports, {
|
|
||||||
Video: () => Video
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(video_exports);
|
|
||||||
var import_manualPromise = require("../utils/isomorphic/manualPromise");
|
|
||||||
class Video {
|
|
||||||
constructor(page, connection) {
|
|
||||||
this._artifact = null;
|
|
||||||
this._artifactReadyPromise = new import_manualPromise.ManualPromise();
|
|
||||||
this._isRemote = false;
|
|
||||||
this._isRemote = connection.isRemote();
|
|
||||||
this._artifact = page._closedOrCrashedScope.safeRace(this._artifactReadyPromise);
|
|
||||||
}
|
|
||||||
_artifactReady(artifact) {
|
|
||||||
this._artifactReadyPromise.resolve(artifact);
|
|
||||||
}
|
|
||||||
async path() {
|
|
||||||
if (this._isRemote)
|
|
||||||
throw new Error(`Path is not available when connecting remotely. Use saveAs() to save a local copy.`);
|
|
||||||
const artifact = await this._artifact;
|
|
||||||
if (!artifact)
|
|
||||||
throw new Error("Page did not produce any video frames");
|
|
||||||
return artifact._initializer.absolutePath;
|
|
||||||
}
|
|
||||||
async saveAs(path) {
|
|
||||||
const artifact = await this._artifact;
|
|
||||||
if (!artifact)
|
|
||||||
throw new Error("Page did not produce any video frames");
|
|
||||||
return await artifact.saveAs(path);
|
|
||||||
}
|
|
||||||
async delete() {
|
|
||||||
const artifact = await this._artifact;
|
|
||||||
if (artifact)
|
|
||||||
await artifact.delete();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
Video
|
|
||||||
});
|
|
||||||
142
tvapp2/node_modules/playwright-core/lib/client/waiter.js
generated
vendored
142
tvapp2/node_modules/playwright-core/lib/client/waiter.js
generated
vendored
@@ -1,142 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var waiter_exports = {};
|
|
||||||
__export(waiter_exports, {
|
|
||||||
Waiter: () => Waiter
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(waiter_exports);
|
|
||||||
var import_errors = require("./errors");
|
|
||||||
var import_stackTrace = require("../utils/isomorphic/stackTrace");
|
|
||||||
class Waiter {
|
|
||||||
constructor(channelOwner, event) {
|
|
||||||
this._failures = [];
|
|
||||||
this._logs = [];
|
|
||||||
this._waitId = channelOwner._platform.createGuid();
|
|
||||||
this._channelOwner = channelOwner;
|
|
||||||
this._savedZone = channelOwner._platform.zones.current().pop();
|
|
||||||
this._channelOwner._channel.waitForEventInfo({ info: { waitId: this._waitId, phase: "before", event } }).catch(() => {
|
|
||||||
});
|
|
||||||
this._dispose = [
|
|
||||||
() => this._channelOwner._wrapApiCall(async () => {
|
|
||||||
await this._channelOwner._channel.waitForEventInfo({ info: { waitId: this._waitId, phase: "after", error: this._error } });
|
|
||||||
}, true).catch(() => {
|
|
||||||
})
|
|
||||||
];
|
|
||||||
}
|
|
||||||
static createForEvent(channelOwner, event) {
|
|
||||||
return new Waiter(channelOwner, event);
|
|
||||||
}
|
|
||||||
async waitForEvent(emitter, event, predicate) {
|
|
||||||
const { promise, dispose } = waitForEvent(emitter, event, this._savedZone, predicate);
|
|
||||||
return await this.waitForPromise(promise, dispose);
|
|
||||||
}
|
|
||||||
rejectOnEvent(emitter, event, error, predicate) {
|
|
||||||
const { promise, dispose } = waitForEvent(emitter, event, this._savedZone, predicate);
|
|
||||||
this._rejectOn(promise.then(() => {
|
|
||||||
throw typeof error === "function" ? error() : error;
|
|
||||||
}), dispose);
|
|
||||||
}
|
|
||||||
rejectOnTimeout(timeout, message) {
|
|
||||||
if (!timeout)
|
|
||||||
return;
|
|
||||||
const { promise, dispose } = waitForTimeout(timeout);
|
|
||||||
this._rejectOn(promise.then(() => {
|
|
||||||
throw new import_errors.TimeoutError(message);
|
|
||||||
}), dispose);
|
|
||||||
}
|
|
||||||
rejectImmediately(error) {
|
|
||||||
this._immediateError = error;
|
|
||||||
}
|
|
||||||
dispose() {
|
|
||||||
for (const dispose of this._dispose)
|
|
||||||
dispose();
|
|
||||||
}
|
|
||||||
async waitForPromise(promise, dispose) {
|
|
||||||
try {
|
|
||||||
if (this._immediateError)
|
|
||||||
throw this._immediateError;
|
|
||||||
const result = await Promise.race([promise, ...this._failures]);
|
|
||||||
if (dispose)
|
|
||||||
dispose();
|
|
||||||
return result;
|
|
||||||
} catch (e) {
|
|
||||||
if (dispose)
|
|
||||||
dispose();
|
|
||||||
this._error = e.message;
|
|
||||||
this.dispose();
|
|
||||||
(0, import_stackTrace.rewriteErrorMessage)(e, e.message + formatLogRecording(this._logs));
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
log(s) {
|
|
||||||
this._logs.push(s);
|
|
||||||
this._channelOwner._wrapApiCall(async () => {
|
|
||||||
await this._channelOwner._channel.waitForEventInfo({ info: { waitId: this._waitId, phase: "log", message: s } });
|
|
||||||
}, true).catch(() => {
|
|
||||||
});
|
|
||||||
}
|
|
||||||
_rejectOn(promise, dispose) {
|
|
||||||
this._failures.push(promise);
|
|
||||||
if (dispose)
|
|
||||||
this._dispose.push(dispose);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function waitForEvent(emitter, event, savedZone, predicate) {
|
|
||||||
let listener;
|
|
||||||
const promise = new Promise((resolve, reject) => {
|
|
||||||
listener = async (eventArg) => {
|
|
||||||
await savedZone.run(async () => {
|
|
||||||
try {
|
|
||||||
if (predicate && !await predicate(eventArg))
|
|
||||||
return;
|
|
||||||
emitter.removeListener(event, listener);
|
|
||||||
resolve(eventArg);
|
|
||||||
} catch (e) {
|
|
||||||
emitter.removeListener(event, listener);
|
|
||||||
reject(e);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
emitter.addListener(event, listener);
|
|
||||||
});
|
|
||||||
const dispose = () => emitter.removeListener(event, listener);
|
|
||||||
return { promise, dispose };
|
|
||||||
}
|
|
||||||
function waitForTimeout(timeout) {
|
|
||||||
let timeoutId;
|
|
||||||
const promise = new Promise((resolve) => timeoutId = setTimeout(resolve, timeout));
|
|
||||||
const dispose = () => clearTimeout(timeoutId);
|
|
||||||
return { promise, dispose };
|
|
||||||
}
|
|
||||||
function formatLogRecording(log) {
|
|
||||||
if (!log.length)
|
|
||||||
return "";
|
|
||||||
const header = ` logs `;
|
|
||||||
const headerLength = 60;
|
|
||||||
const leftLength = (headerLength - header.length) / 2;
|
|
||||||
const rightLength = headerLength - header.length - leftLength;
|
|
||||||
return `
|
|
||||||
${"=".repeat(leftLength)}${header}${"=".repeat(rightLength)}
|
|
||||||
${log.join("\n")}
|
|
||||||
${"=".repeat(headerLength)}`;
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
Waiter
|
|
||||||
});
|
|
||||||
39
tvapp2/node_modules/playwright-core/lib/client/webError.js
generated
vendored
39
tvapp2/node_modules/playwright-core/lib/client/webError.js
generated
vendored
@@ -1,39 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var webError_exports = {};
|
|
||||||
__export(webError_exports, {
|
|
||||||
WebError: () => WebError
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(webError_exports);
|
|
||||||
class WebError {
|
|
||||||
constructor(page, error) {
|
|
||||||
this._page = page;
|
|
||||||
this._error = error;
|
|
||||||
}
|
|
||||||
page() {
|
|
||||||
return this._page;
|
|
||||||
}
|
|
||||||
error() {
|
|
||||||
return this._error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
WebError
|
|
||||||
});
|
|
||||||
63
tvapp2/node_modules/playwright-core/lib/client/worker.js
generated
vendored
63
tvapp2/node_modules/playwright-core/lib/client/worker.js
generated
vendored
@@ -1,63 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var worker_exports = {};
|
|
||||||
__export(worker_exports, {
|
|
||||||
Worker: () => Worker
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(worker_exports);
|
|
||||||
var import_channelOwner = require("./channelOwner");
|
|
||||||
var import_errors = require("./errors");
|
|
||||||
var import_events = require("./events");
|
|
||||||
var import_jsHandle = require("./jsHandle");
|
|
||||||
var import_manualPromise = require("../utils/isomorphic/manualPromise");
|
|
||||||
class Worker extends import_channelOwner.ChannelOwner {
|
|
||||||
constructor(parent, type, guid, initializer) {
|
|
||||||
super(parent, type, guid, initializer);
|
|
||||||
// Set for service workers.
|
|
||||||
this._closedScope = new import_manualPromise.LongStandingScope();
|
|
||||||
this._channel.on("close", () => {
|
|
||||||
if (this._page)
|
|
||||||
this._page._workers.delete(this);
|
|
||||||
if (this._context)
|
|
||||||
this._context._serviceWorkers.delete(this);
|
|
||||||
this.emit(import_events.Events.Worker.Close, this);
|
|
||||||
});
|
|
||||||
this.once(import_events.Events.Worker.Close, () => this._closedScope.close(this._page?._closeErrorWithReason() || new import_errors.TargetClosedError()));
|
|
||||||
}
|
|
||||||
static from(worker) {
|
|
||||||
return worker._object;
|
|
||||||
}
|
|
||||||
url() {
|
|
||||||
return this._initializer.url;
|
|
||||||
}
|
|
||||||
async evaluate(pageFunction, arg) {
|
|
||||||
(0, import_jsHandle.assertMaxArguments)(arguments.length, 2);
|
|
||||||
const result = await this._channel.evaluateExpression({ expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: (0, import_jsHandle.serializeArgument)(arg) });
|
|
||||||
return (0, import_jsHandle.parseResult)(result.value);
|
|
||||||
}
|
|
||||||
async evaluateHandle(pageFunction, arg) {
|
|
||||||
(0, import_jsHandle.assertMaxArguments)(arguments.length, 2);
|
|
||||||
const result = await this._channel.evaluateExpressionHandle({ expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: (0, import_jsHandle.serializeArgument)(arg) });
|
|
||||||
return import_jsHandle.JSHandle.from(result.handle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
Worker
|
|
||||||
});
|
|
||||||
39
tvapp2/node_modules/playwright-core/lib/client/writableStream.js
generated
vendored
39
tvapp2/node_modules/playwright-core/lib/client/writableStream.js
generated
vendored
@@ -1,39 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var writableStream_exports = {};
|
|
||||||
__export(writableStream_exports, {
|
|
||||||
WritableStream: () => WritableStream
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(writableStream_exports);
|
|
||||||
var import_channelOwner = require("./channelOwner");
|
|
||||||
class WritableStream extends import_channelOwner.ChannelOwner {
|
|
||||||
static from(Stream) {
|
|
||||||
return Stream._object;
|
|
||||||
}
|
|
||||||
constructor(parent, type, guid, initializer) {
|
|
||||||
super(parent, type, guid, initializer);
|
|
||||||
}
|
|
||||||
stream() {
|
|
||||||
return this._platform.streamWritable(this._channel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
WritableStream
|
|
||||||
});
|
|
||||||
28
tvapp2/node_modules/playwright-core/lib/generated/clockSource.js
generated
vendored
28
tvapp2/node_modules/playwright-core/lib/generated/clockSource.js
generated
vendored
File diff suppressed because one or more lines are too long
28
tvapp2/node_modules/playwright-core/lib/generated/consoleApiSource.js
generated
vendored
28
tvapp2/node_modules/playwright-core/lib/generated/consoleApiSource.js
generated
vendored
File diff suppressed because one or more lines are too long
28
tvapp2/node_modules/playwright-core/lib/generated/injectedScriptSource.js
generated
vendored
28
tvapp2/node_modules/playwright-core/lib/generated/injectedScriptSource.js
generated
vendored
File diff suppressed because one or more lines are too long
28
tvapp2/node_modules/playwright-core/lib/generated/pollingRecorderSource.js
generated
vendored
28
tvapp2/node_modules/playwright-core/lib/generated/pollingRecorderSource.js
generated
vendored
File diff suppressed because one or more lines are too long
28
tvapp2/node_modules/playwright-core/lib/generated/utilityScriptSource.js
generated
vendored
28
tvapp2/node_modules/playwright-core/lib/generated/utilityScriptSource.js
generated
vendored
File diff suppressed because one or more lines are too long
378
tvapp2/node_modules/playwright-core/lib/generated/webSocketMockSource.js
generated
vendored
378
tvapp2/node_modules/playwright-core/lib/generated/webSocketMockSource.js
generated
vendored
@@ -1,378 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var webSocketMockSource_exports = {};
|
|
||||||
__export(webSocketMockSource_exports, {
|
|
||||||
source: () => source
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(webSocketMockSource_exports);
|
|
||||||
const source = `
|
|
||||||
var __commonJS = obj => {
|
|
||||||
let required = false;
|
|
||||||
let result;
|
|
||||||
return function __require() {
|
|
||||||
if (!required) {
|
|
||||||
required = true;
|
|
||||||
let fn;
|
|
||||||
for (const name in obj) { fn = obj[name]; break; }
|
|
||||||
const module = { exports: {} };
|
|
||||||
fn(module.exports, module);
|
|
||||||
result = module.exports;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
var __export = (target, all) => {for (var name in all) target[name] = all[name];};
|
|
||||||
var __toESM = mod => ({ ...mod, 'default': mod });
|
|
||||||
var __toCommonJS = mod => ({ ...mod, __esModule: true });
|
|
||||||
|
|
||||||
|
|
||||||
// packages/injected/src/webSocketMock.ts
|
|
||||||
var webSocketMock_exports = {};
|
|
||||||
__export(webSocketMock_exports, {
|
|
||||||
inject: () => inject
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(webSocketMock_exports);
|
|
||||||
|
|
||||||
// packages/playwright-core/src/utils/isomorphic/builtins.ts
|
|
||||||
function builtins(global) {
|
|
||||||
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
||||||
global = global != null ? global : globalThis;
|
|
||||||
if (!global["__playwright_builtins__"]) {
|
|
||||||
const builtins2 = {
|
|
||||||
setTimeout: (_a = global.setTimeout) == null ? void 0 : _a.bind(global),
|
|
||||||
clearTimeout: (_b = global.clearTimeout) == null ? void 0 : _b.bind(global),
|
|
||||||
setInterval: (_c = global.setInterval) == null ? void 0 : _c.bind(global),
|
|
||||||
clearInterval: (_d = global.clearInterval) == null ? void 0 : _d.bind(global),
|
|
||||||
requestAnimationFrame: (_e = global.requestAnimationFrame) == null ? void 0 : _e.bind(global),
|
|
||||||
cancelAnimationFrame: (_f = global.cancelAnimationFrame) == null ? void 0 : _f.bind(global),
|
|
||||||
requestIdleCallback: (_g = global.requestIdleCallback) == null ? void 0 : _g.bind(global),
|
|
||||||
cancelIdleCallback: (_h = global.cancelIdleCallback) == null ? void 0 : _h.bind(global),
|
|
||||||
performance: global.performance,
|
|
||||||
eval: (_i = global.eval) == null ? void 0 : _i.bind(global),
|
|
||||||
Intl: global.Intl,
|
|
||||||
Date: global.Date,
|
|
||||||
Map: global.Map,
|
|
||||||
Set: global.Set
|
|
||||||
};
|
|
||||||
Object.defineProperty(global, "__playwright_builtins__", { value: builtins2, configurable: false, enumerable: false, writable: false });
|
|
||||||
}
|
|
||||||
return global["__playwright_builtins__"];
|
|
||||||
}
|
|
||||||
var instance = builtins();
|
|
||||||
var setTimeout = instance.setTimeout;
|
|
||||||
var clearTimeout = instance.clearTimeout;
|
|
||||||
var setInterval = instance.setInterval;
|
|
||||||
var clearInterval = instance.clearInterval;
|
|
||||||
var requestAnimationFrame = instance.requestAnimationFrame;
|
|
||||||
var cancelAnimationFrame = instance.cancelAnimationFrame;
|
|
||||||
var requestIdleCallback = instance.requestIdleCallback;
|
|
||||||
var cancelIdleCallback = instance.cancelIdleCallback;
|
|
||||||
var performance = instance.performance;
|
|
||||||
var Intl = instance.Intl;
|
|
||||||
var Date = instance.Date;
|
|
||||||
var Map = instance.Map;
|
|
||||||
var Set = instance.Set;
|
|
||||||
|
|
||||||
// packages/injected/src/webSocketMock.ts
|
|
||||||
function inject(globalThis2) {
|
|
||||||
if (globalThis2.__pwWebSocketDispatch)
|
|
||||||
return;
|
|
||||||
function generateId() {
|
|
||||||
const bytes = new Uint8Array(32);
|
|
||||||
globalThis2.crypto.getRandomValues(bytes);
|
|
||||||
const hex = "0123456789abcdef";
|
|
||||||
return [...bytes].map((value) => {
|
|
||||||
const high = Math.floor(value / 16);
|
|
||||||
const low = value % 16;
|
|
||||||
return hex[high] + hex[low];
|
|
||||||
}).join("");
|
|
||||||
}
|
|
||||||
function bufferToData(b) {
|
|
||||||
let s = "";
|
|
||||||
for (let i = 0; i < b.length; i++)
|
|
||||||
s += String.fromCharCode(b[i]);
|
|
||||||
return { data: globalThis2.btoa(s), isBase64: true };
|
|
||||||
}
|
|
||||||
function stringToBuffer(s) {
|
|
||||||
s = globalThis2.atob(s);
|
|
||||||
const b = new Uint8Array(s.length);
|
|
||||||
for (let i = 0; i < s.length; i++)
|
|
||||||
b[i] = s.charCodeAt(i);
|
|
||||||
return b.buffer;
|
|
||||||
}
|
|
||||||
function messageToData(message, cb) {
|
|
||||||
if (message instanceof globalThis2.Blob)
|
|
||||||
return message.arrayBuffer().then((buffer) => cb(bufferToData(new Uint8Array(buffer))));
|
|
||||||
if (typeof message === "string")
|
|
||||||
return cb({ data: message, isBase64: false });
|
|
||||||
if (ArrayBuffer.isView(message))
|
|
||||||
return cb(bufferToData(new Uint8Array(message.buffer, message.byteOffset, message.byteLength)));
|
|
||||||
return cb(bufferToData(new Uint8Array(message)));
|
|
||||||
}
|
|
||||||
function dataToMessage(data, binaryType) {
|
|
||||||
if (!data.isBase64)
|
|
||||||
return data.data;
|
|
||||||
const buffer = stringToBuffer(data.data);
|
|
||||||
return binaryType === "arraybuffer" ? buffer : new Blob([buffer]);
|
|
||||||
}
|
|
||||||
const binding = globalThis2.__pwWebSocketBinding;
|
|
||||||
const NativeWebSocket = globalThis2.WebSocket;
|
|
||||||
const idToWebSocket = new Map();
|
|
||||||
globalThis2.__pwWebSocketDispatch = (request) => {
|
|
||||||
const ws = idToWebSocket.get(request.id);
|
|
||||||
if (!ws)
|
|
||||||
return;
|
|
||||||
if (request.type === "connect")
|
|
||||||
ws._apiConnect();
|
|
||||||
if (request.type === "passthrough")
|
|
||||||
ws._apiPassThrough();
|
|
||||||
if (request.type === "ensureOpened")
|
|
||||||
ws._apiEnsureOpened();
|
|
||||||
if (request.type === "sendToPage")
|
|
||||||
ws._apiSendToPage(dataToMessage(request.data, ws.binaryType));
|
|
||||||
if (request.type === "closePage")
|
|
||||||
ws._apiClosePage(request.code, request.reason, request.wasClean);
|
|
||||||
if (request.type === "sendToServer")
|
|
||||||
ws._apiSendToServer(dataToMessage(request.data, ws.binaryType));
|
|
||||||
if (request.type === "closeServer")
|
|
||||||
ws._apiCloseServer(request.code, request.reason, request.wasClean);
|
|
||||||
};
|
|
||||||
const _WebSocketMock = class _WebSocketMock extends EventTarget {
|
|
||||||
constructor(url, protocols) {
|
|
||||||
var _a, _b;
|
|
||||||
super();
|
|
||||||
// WebSocket.CLOSED
|
|
||||||
this.CONNECTING = 0;
|
|
||||||
// WebSocket.CONNECTING
|
|
||||||
this.OPEN = 1;
|
|
||||||
// WebSocket.OPEN
|
|
||||||
this.CLOSING = 2;
|
|
||||||
// WebSocket.CLOSING
|
|
||||||
this.CLOSED = 3;
|
|
||||||
// WebSocket.CLOSED
|
|
||||||
this._oncloseListener = null;
|
|
||||||
this._onerrorListener = null;
|
|
||||||
this._onmessageListener = null;
|
|
||||||
this._onopenListener = null;
|
|
||||||
this.bufferedAmount = 0;
|
|
||||||
this.extensions = "";
|
|
||||||
this.protocol = "";
|
|
||||||
this.readyState = 0;
|
|
||||||
this._origin = "";
|
|
||||||
this._passthrough = false;
|
|
||||||
this._wsBufferedMessages = [];
|
|
||||||
this._binaryType = "blob";
|
|
||||||
this.url = new URL(url, globalThis2.window.document.baseURI).href.replace(/^http/, "ws");
|
|
||||||
this._origin = (_b = (_a = URL.parse(this.url)) == null ? void 0 : _a.origin) != null ? _b : "";
|
|
||||||
this._protocols = protocols;
|
|
||||||
this._id = generateId();
|
|
||||||
idToWebSocket.set(this._id, this);
|
|
||||||
binding({ type: "onCreate", id: this._id, url: this.url });
|
|
||||||
}
|
|
||||||
// --- native WebSocket implementation ---
|
|
||||||
get binaryType() {
|
|
||||||
return this._binaryType;
|
|
||||||
}
|
|
||||||
set binaryType(type) {
|
|
||||||
this._binaryType = type;
|
|
||||||
if (this._ws)
|
|
||||||
this._ws.binaryType = type;
|
|
||||||
}
|
|
||||||
get onclose() {
|
|
||||||
return this._oncloseListener;
|
|
||||||
}
|
|
||||||
set onclose(listener) {
|
|
||||||
if (this._oncloseListener)
|
|
||||||
this.removeEventListener("close", this._oncloseListener);
|
|
||||||
this._oncloseListener = listener;
|
|
||||||
if (this._oncloseListener)
|
|
||||||
this.addEventListener("close", this._oncloseListener);
|
|
||||||
}
|
|
||||||
get onerror() {
|
|
||||||
return this._onerrorListener;
|
|
||||||
}
|
|
||||||
set onerror(listener) {
|
|
||||||
if (this._onerrorListener)
|
|
||||||
this.removeEventListener("error", this._onerrorListener);
|
|
||||||
this._onerrorListener = listener;
|
|
||||||
if (this._onerrorListener)
|
|
||||||
this.addEventListener("error", this._onerrorListener);
|
|
||||||
}
|
|
||||||
get onopen() {
|
|
||||||
return this._onopenListener;
|
|
||||||
}
|
|
||||||
set onopen(listener) {
|
|
||||||
if (this._onopenListener)
|
|
||||||
this.removeEventListener("open", this._onopenListener);
|
|
||||||
this._onopenListener = listener;
|
|
||||||
if (this._onopenListener)
|
|
||||||
this.addEventListener("open", this._onopenListener);
|
|
||||||
}
|
|
||||||
get onmessage() {
|
|
||||||
return this._onmessageListener;
|
|
||||||
}
|
|
||||||
set onmessage(listener) {
|
|
||||||
if (this._onmessageListener)
|
|
||||||
this.removeEventListener("message", this._onmessageListener);
|
|
||||||
this._onmessageListener = listener;
|
|
||||||
if (this._onmessageListener)
|
|
||||||
this.addEventListener("message", this._onmessageListener);
|
|
||||||
}
|
|
||||||
send(message) {
|
|
||||||
if (this.readyState === _WebSocketMock.CONNECTING)
|
|
||||||
throw new DOMException(\`Failed to execute 'send' on 'WebSocket': Still in CONNECTING state.\`);
|
|
||||||
if (this.readyState !== _WebSocketMock.OPEN)
|
|
||||||
throw new DOMException(\`WebSocket is already in CLOSING or CLOSED state.\`);
|
|
||||||
if (this._passthrough) {
|
|
||||||
if (this._ws)
|
|
||||||
this._apiSendToServer(message);
|
|
||||||
} else {
|
|
||||||
messageToData(message, (data) => binding({ type: "onMessageFromPage", id: this._id, data }));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
close(code, reason) {
|
|
||||||
if (code !== void 0 && code !== 1e3 && (code < 3e3 || code > 4999))
|
|
||||||
throw new DOMException(\`Failed to execute 'close' on 'WebSocket': The close code must be either 1000, or between 3000 and 4999. \${code} is neither.\`);
|
|
||||||
if (this.readyState === _WebSocketMock.OPEN || this.readyState === _WebSocketMock.CONNECTING)
|
|
||||||
this.readyState = _WebSocketMock.CLOSING;
|
|
||||||
if (this._passthrough)
|
|
||||||
this._apiCloseServer(code, reason, true);
|
|
||||||
else
|
|
||||||
binding({ type: "onClosePage", id: this._id, code, reason, wasClean: true });
|
|
||||||
}
|
|
||||||
// --- methods called from the routing API ---
|
|
||||||
_apiEnsureOpened() {
|
|
||||||
if (!this._ws)
|
|
||||||
this._ensureOpened();
|
|
||||||
}
|
|
||||||
_apiSendToPage(message) {
|
|
||||||
this._ensureOpened();
|
|
||||||
if (this.readyState !== _WebSocketMock.OPEN)
|
|
||||||
throw new DOMException(\`WebSocket is already in CLOSING or CLOSED state.\`);
|
|
||||||
this.dispatchEvent(new MessageEvent("message", { data: message, origin: this._origin, cancelable: true }));
|
|
||||||
}
|
|
||||||
_apiSendToServer(message) {
|
|
||||||
if (!this._ws)
|
|
||||||
throw new Error("Cannot send a message before connecting to the server");
|
|
||||||
if (this._ws.readyState === _WebSocketMock.CONNECTING)
|
|
||||||
this._wsBufferedMessages.push(message);
|
|
||||||
else
|
|
||||||
this._ws.send(message);
|
|
||||||
}
|
|
||||||
_apiConnect() {
|
|
||||||
if (this._ws)
|
|
||||||
throw new Error("Can only connect to the server once");
|
|
||||||
this._ws = new NativeWebSocket(this.url, this._protocols);
|
|
||||||
this._ws.binaryType = this._binaryType;
|
|
||||||
this._ws.onopen = () => {
|
|
||||||
for (const message of this._wsBufferedMessages)
|
|
||||||
this._ws.send(message);
|
|
||||||
this._wsBufferedMessages = [];
|
|
||||||
this._ensureOpened();
|
|
||||||
};
|
|
||||||
this._ws.onclose = (event) => {
|
|
||||||
this._onWSClose(event.code, event.reason, event.wasClean);
|
|
||||||
};
|
|
||||||
this._ws.onmessage = (event) => {
|
|
||||||
if (this._passthrough)
|
|
||||||
this._apiSendToPage(event.data);
|
|
||||||
else
|
|
||||||
messageToData(event.data, (data) => binding({ type: "onMessageFromServer", id: this._id, data }));
|
|
||||||
};
|
|
||||||
this._ws.onerror = () => {
|
|
||||||
const event = new Event("error", { cancelable: true });
|
|
||||||
this.dispatchEvent(event);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
// This method connects to the server, and passes all messages through,
|
|
||||||
// as if WebSocketMock was not engaged.
|
|
||||||
_apiPassThrough() {
|
|
||||||
this._passthrough = true;
|
|
||||||
this._apiConnect();
|
|
||||||
}
|
|
||||||
_apiCloseServer(code, reason, wasClean) {
|
|
||||||
if (!this._ws) {
|
|
||||||
this._onWSClose(code, reason, wasClean);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (this._ws.readyState === _WebSocketMock.CONNECTING || this._ws.readyState === _WebSocketMock.OPEN)
|
|
||||||
this._ws.close(code, reason);
|
|
||||||
}
|
|
||||||
_apiClosePage(code, reason, wasClean) {
|
|
||||||
if (this.readyState === _WebSocketMock.CLOSED)
|
|
||||||
return;
|
|
||||||
this.readyState = _WebSocketMock.CLOSED;
|
|
||||||
this.dispatchEvent(new CloseEvent("close", { code, reason, wasClean, cancelable: true }));
|
|
||||||
this._maybeCleanup();
|
|
||||||
if (this._passthrough)
|
|
||||||
this._apiCloseServer(code, reason, wasClean);
|
|
||||||
else
|
|
||||||
binding({ type: "onClosePage", id: this._id, code, reason, wasClean });
|
|
||||||
}
|
|
||||||
// --- internals ---
|
|
||||||
_ensureOpened() {
|
|
||||||
var _a;
|
|
||||||
if (this.readyState !== _WebSocketMock.CONNECTING)
|
|
||||||
return;
|
|
||||||
this.extensions = ((_a = this._ws) == null ? void 0 : _a.extensions) || "";
|
|
||||||
if (this._ws)
|
|
||||||
this.protocol = this._ws.protocol;
|
|
||||||
else if (Array.isArray(this._protocols))
|
|
||||||
this.protocol = this._protocols[0] || "";
|
|
||||||
else
|
|
||||||
this.protocol = this._protocols || "";
|
|
||||||
this.readyState = _WebSocketMock.OPEN;
|
|
||||||
this.dispatchEvent(new Event("open", { cancelable: true }));
|
|
||||||
}
|
|
||||||
_onWSClose(code, reason, wasClean) {
|
|
||||||
if (this._passthrough)
|
|
||||||
this._apiClosePage(code, reason, wasClean);
|
|
||||||
else
|
|
||||||
binding({ type: "onCloseServer", id: this._id, code, reason, wasClean });
|
|
||||||
if (this._ws) {
|
|
||||||
this._ws.onopen = null;
|
|
||||||
this._ws.onclose = null;
|
|
||||||
this._ws.onmessage = null;
|
|
||||||
this._ws.onerror = null;
|
|
||||||
this._ws = void 0;
|
|
||||||
this._wsBufferedMessages = [];
|
|
||||||
}
|
|
||||||
this._maybeCleanup();
|
|
||||||
}
|
|
||||||
_maybeCleanup() {
|
|
||||||
if (this.readyState === _WebSocketMock.CLOSED && !this._ws)
|
|
||||||
idToWebSocket.delete(this._id);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
_WebSocketMock.CONNECTING = 0;
|
|
||||||
// WebSocket.CONNECTING
|
|
||||||
_WebSocketMock.OPEN = 1;
|
|
||||||
// WebSocket.OPEN
|
|
||||||
_WebSocketMock.CLOSING = 2;
|
|
||||||
// WebSocket.CLOSING
|
|
||||||
_WebSocketMock.CLOSED = 3;
|
|
||||||
let WebSocketMock = _WebSocketMock;
|
|
||||||
globalThis2.WebSocket = class WebSocket extends WebSocketMock {
|
|
||||||
};
|
|
||||||
}
|
|
||||||
`;
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
source
|
|
||||||
});
|
|
||||||
59
tvapp2/node_modules/playwright-core/lib/inProcessFactory.js
generated
vendored
59
tvapp2/node_modules/playwright-core/lib/inProcessFactory.js
generated
vendored
@@ -1,59 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var inProcessFactory_exports = {};
|
|
||||||
__export(inProcessFactory_exports, {
|
|
||||||
createInProcessPlaywright: () => createInProcessPlaywright
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(inProcessFactory_exports);
|
|
||||||
var import_androidServerImpl = require("./androidServerImpl");
|
|
||||||
var import_browserServerImpl = require("./browserServerImpl");
|
|
||||||
var import_server = require("./server");
|
|
||||||
var import_nodePlatform = require("./server/utils/nodePlatform");
|
|
||||||
var import_connection = require("./client/connection");
|
|
||||||
var import_selectors = require("./client/selectors");
|
|
||||||
function createInProcessPlaywright() {
|
|
||||||
const playwright = (0, import_server.createPlaywright)({ sdkLanguage: process.env.PW_LANG_NAME || "javascript" });
|
|
||||||
(0, import_selectors.setPlatformForSelectors)(import_nodePlatform.nodePlatform);
|
|
||||||
const clientConnection = new import_connection.Connection(import_nodePlatform.nodePlatform);
|
|
||||||
clientConnection.useRawBuffers();
|
|
||||||
const dispatcherConnection = new import_server.DispatcherConnection(
|
|
||||||
true
|
|
||||||
/* local */
|
|
||||||
);
|
|
||||||
dispatcherConnection.onmessage = (message) => clientConnection.dispatch(message);
|
|
||||||
clientConnection.onmessage = (message) => dispatcherConnection.dispatch(message);
|
|
||||||
const rootScope = new import_server.RootDispatcher(dispatcherConnection);
|
|
||||||
new import_server.PlaywrightDispatcher(rootScope, playwright);
|
|
||||||
const playwrightAPI = clientConnection.getObjectWithKnownName("Playwright");
|
|
||||||
playwrightAPI.chromium._serverLauncher = new import_browserServerImpl.BrowserServerLauncherImpl("chromium");
|
|
||||||
playwrightAPI.firefox._serverLauncher = new import_browserServerImpl.BrowserServerLauncherImpl("firefox");
|
|
||||||
playwrightAPI.webkit._serverLauncher = new import_browserServerImpl.BrowserServerLauncherImpl("webkit");
|
|
||||||
playwrightAPI._android._serverLauncher = new import_androidServerImpl.AndroidServerLauncherImpl();
|
|
||||||
playwrightAPI._bidiChromium._serverLauncher = new import_browserServerImpl.BrowserServerLauncherImpl("bidiChromium");
|
|
||||||
playwrightAPI._bidiFirefox._serverLauncher = new import_browserServerImpl.BrowserServerLauncherImpl("bidiFirefox");
|
|
||||||
dispatcherConnection.onmessage = (message) => setImmediate(() => clientConnection.dispatch(message));
|
|
||||||
clientConnection.onmessage = (message) => setImmediate(() => dispatcherConnection.dispatch(message));
|
|
||||||
clientConnection.toImpl = (x) => x ? dispatcherConnection._dispatchers.get(x._guid)._object : dispatcherConnection._dispatchers.get("");
|
|
||||||
playwrightAPI._toImpl = clientConnection.toImpl;
|
|
||||||
return playwrightAPI;
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
createInProcessPlaywright
|
|
||||||
});
|
|
||||||
3
tvapp2/node_modules/playwright-core/lib/inprocess.js
generated
vendored
3
tvapp2/node_modules/playwright-core/lib/inprocess.js
generated
vendored
@@ -1,3 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var import_inProcessFactory = require("./inProcessFactory");
|
|
||||||
module.exports = (0, import_inProcessFactory.createInProcessPlaywright)();
|
|
||||||
78
tvapp2/node_modules/playwright-core/lib/outofprocess.js
generated
vendored
78
tvapp2/node_modules/playwright-core/lib/outofprocess.js
generated
vendored
@@ -1,78 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __create = Object.create;
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __getProtoOf = Object.getPrototypeOf;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
||||||
// If the importer is in node compatibility mode or this is not an ESM
|
|
||||||
// file that has been converted to a CommonJS file using a Babel-
|
|
||||||
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
||||||
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
||||||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
||||||
mod
|
|
||||||
));
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var outofprocess_exports = {};
|
|
||||||
__export(outofprocess_exports, {
|
|
||||||
start: () => start
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(outofprocess_exports);
|
|
||||||
var childProcess = __toESM(require("child_process"));
|
|
||||||
var import_path = __toESM(require("path"));
|
|
||||||
var import_connection = require("./client/connection");
|
|
||||||
var import_pipeTransport = require("./server/utils/pipeTransport");
|
|
||||||
var import_manualPromise = require("./utils/isomorphic/manualPromise");
|
|
||||||
var import_nodePlatform = require("./server/utils/nodePlatform");
|
|
||||||
var import_selectors = require("./client/selectors");
|
|
||||||
async function start(env = {}) {
|
|
||||||
(0, import_selectors.setPlatformForSelectors)(import_nodePlatform.nodePlatform);
|
|
||||||
const client = new PlaywrightClient(env);
|
|
||||||
const playwright = await client._playwright;
|
|
||||||
playwright.driverProcess = client._driverProcess;
|
|
||||||
return { playwright, stop: () => client.stop() };
|
|
||||||
}
|
|
||||||
class PlaywrightClient {
|
|
||||||
constructor(env) {
|
|
||||||
this._closePromise = new import_manualPromise.ManualPromise();
|
|
||||||
this._driverProcess = childProcess.fork(import_path.default.join(__dirname, "..", "cli.js"), ["run-driver"], {
|
|
||||||
stdio: "pipe",
|
|
||||||
detached: true,
|
|
||||||
env: {
|
|
||||||
...process.env,
|
|
||||||
...env
|
|
||||||
}
|
|
||||||
});
|
|
||||||
this._driverProcess.unref();
|
|
||||||
this._driverProcess.stderr.on("data", (data) => process.stderr.write(data));
|
|
||||||
const connection = new import_connection.Connection(import_nodePlatform.nodePlatform);
|
|
||||||
const transport = new import_pipeTransport.PipeTransport(this._driverProcess.stdin, this._driverProcess.stdout);
|
|
||||||
connection.onmessage = (message) => transport.send(JSON.stringify(message));
|
|
||||||
transport.onmessage = (message) => connection.dispatch(JSON.parse(message));
|
|
||||||
transport.onclose = () => this._closePromise.resolve();
|
|
||||||
this._playwright = connection.initializePlaywright();
|
|
||||||
}
|
|
||||||
async stop() {
|
|
||||||
this._driverProcess.stdin.destroy();
|
|
||||||
this._driverProcess.stdout.destroy();
|
|
||||||
this._driverProcess.stderr.destroy();
|
|
||||||
await this._closePromise;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
start
|
|
||||||
});
|
|
||||||
211
tvapp2/node_modules/playwright-core/lib/protocol/debug.js
generated
vendored
211
tvapp2/node_modules/playwright-core/lib/protocol/debug.js
generated
vendored
@@ -1,211 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var debug_exports = {};
|
|
||||||
__export(debug_exports, {
|
|
||||||
commandsWithTracingSnapshots: () => commandsWithTracingSnapshots,
|
|
||||||
pausesBeforeInputActions: () => pausesBeforeInputActions,
|
|
||||||
slowMoActions: () => slowMoActions
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(debug_exports);
|
|
||||||
const slowMoActions = /* @__PURE__ */ new Set([
|
|
||||||
"Page.goBack",
|
|
||||||
"Page.goForward",
|
|
||||||
"Page.reload",
|
|
||||||
"Page.keyboardDown",
|
|
||||||
"Page.keyboardUp",
|
|
||||||
"Page.keyboardInsertText",
|
|
||||||
"Page.keyboardType",
|
|
||||||
"Page.keyboardPress",
|
|
||||||
"Page.mouseMove",
|
|
||||||
"Page.mouseDown",
|
|
||||||
"Page.mouseUp",
|
|
||||||
"Page.mouseClick",
|
|
||||||
"Page.mouseWheel",
|
|
||||||
"Page.touchscreenTap",
|
|
||||||
"Frame.blur",
|
|
||||||
"Frame.check",
|
|
||||||
"Frame.click",
|
|
||||||
"Frame.dragAndDrop",
|
|
||||||
"Frame.dblclick",
|
|
||||||
"Frame.dispatchEvent",
|
|
||||||
"Frame.fill",
|
|
||||||
"Frame.focus",
|
|
||||||
"Frame.goto",
|
|
||||||
"Frame.hover",
|
|
||||||
"Frame.press",
|
|
||||||
"Frame.selectOption",
|
|
||||||
"Frame.setInputFiles",
|
|
||||||
"Frame.tap",
|
|
||||||
"Frame.type",
|
|
||||||
"Frame.uncheck",
|
|
||||||
"ElementHandle.check",
|
|
||||||
"ElementHandle.click",
|
|
||||||
"ElementHandle.dblclick",
|
|
||||||
"ElementHandle.dispatchEvent",
|
|
||||||
"ElementHandle.fill",
|
|
||||||
"ElementHandle.focus",
|
|
||||||
"ElementHandle.hover",
|
|
||||||
"ElementHandle.press",
|
|
||||||
"ElementHandle.scrollIntoViewIfNeeded",
|
|
||||||
"ElementHandle.selectOption",
|
|
||||||
"ElementHandle.selectText",
|
|
||||||
"ElementHandle.setInputFiles",
|
|
||||||
"ElementHandle.tap",
|
|
||||||
"ElementHandle.type",
|
|
||||||
"ElementHandle.uncheck"
|
|
||||||
]);
|
|
||||||
const commandsWithTracingSnapshots = /* @__PURE__ */ new Set([
|
|
||||||
"EventTarget.waitForEventInfo",
|
|
||||||
"BrowserContext.waitForEventInfo",
|
|
||||||
"Page.waitForEventInfo",
|
|
||||||
"WebSocket.waitForEventInfo",
|
|
||||||
"ElectronApplication.waitForEventInfo",
|
|
||||||
"AndroidDevice.waitForEventInfo",
|
|
||||||
"Page.emulateMedia",
|
|
||||||
"Page.goBack",
|
|
||||||
"Page.goForward",
|
|
||||||
"Page.reload",
|
|
||||||
"Page.expectScreenshot",
|
|
||||||
"Page.screenshot",
|
|
||||||
"Page.setViewportSize",
|
|
||||||
"Page.keyboardDown",
|
|
||||||
"Page.keyboardUp",
|
|
||||||
"Page.keyboardInsertText",
|
|
||||||
"Page.keyboardType",
|
|
||||||
"Page.keyboardPress",
|
|
||||||
"Page.mouseMove",
|
|
||||||
"Page.mouseDown",
|
|
||||||
"Page.mouseUp",
|
|
||||||
"Page.mouseClick",
|
|
||||||
"Page.mouseWheel",
|
|
||||||
"Page.touchscreenTap",
|
|
||||||
"Page.accessibilitySnapshot",
|
|
||||||
"Frame.evalOnSelector",
|
|
||||||
"Frame.evalOnSelectorAll",
|
|
||||||
"Frame.addScriptTag",
|
|
||||||
"Frame.addStyleTag",
|
|
||||||
"Frame.ariaSnapshot",
|
|
||||||
"Frame.blur",
|
|
||||||
"Frame.check",
|
|
||||||
"Frame.click",
|
|
||||||
"Frame.content",
|
|
||||||
"Frame.dragAndDrop",
|
|
||||||
"Frame.dblclick",
|
|
||||||
"Frame.dispatchEvent",
|
|
||||||
"Frame.evaluateExpression",
|
|
||||||
"Frame.evaluateExpressionHandle",
|
|
||||||
"Frame.fill",
|
|
||||||
"Frame.focus",
|
|
||||||
"Frame.getAttribute",
|
|
||||||
"Frame.goto",
|
|
||||||
"Frame.hover",
|
|
||||||
"Frame.innerHTML",
|
|
||||||
"Frame.innerText",
|
|
||||||
"Frame.inputValue",
|
|
||||||
"Frame.isChecked",
|
|
||||||
"Frame.isDisabled",
|
|
||||||
"Frame.isEnabled",
|
|
||||||
"Frame.isHidden",
|
|
||||||
"Frame.isVisible",
|
|
||||||
"Frame.isEditable",
|
|
||||||
"Frame.press",
|
|
||||||
"Frame.querySelector",
|
|
||||||
"Frame.querySelectorAll",
|
|
||||||
"Frame.queryCount",
|
|
||||||
"Frame.selectOption",
|
|
||||||
"Frame.setContent",
|
|
||||||
"Frame.setInputFiles",
|
|
||||||
"Frame.tap",
|
|
||||||
"Frame.textContent",
|
|
||||||
"Frame.type",
|
|
||||||
"Frame.uncheck",
|
|
||||||
"Frame.waitForTimeout",
|
|
||||||
"Frame.waitForFunction",
|
|
||||||
"Frame.waitForSelector",
|
|
||||||
"Frame.expect",
|
|
||||||
"JSHandle.evaluateExpression",
|
|
||||||
"ElementHandle.evaluateExpression",
|
|
||||||
"JSHandle.evaluateExpressionHandle",
|
|
||||||
"ElementHandle.evaluateExpressionHandle",
|
|
||||||
"ElementHandle.evalOnSelector",
|
|
||||||
"ElementHandle.evalOnSelectorAll",
|
|
||||||
"ElementHandle.boundingBox",
|
|
||||||
"ElementHandle.check",
|
|
||||||
"ElementHandle.click",
|
|
||||||
"ElementHandle.contentFrame",
|
|
||||||
"ElementHandle.dblclick",
|
|
||||||
"ElementHandle.dispatchEvent",
|
|
||||||
"ElementHandle.fill",
|
|
||||||
"ElementHandle.focus",
|
|
||||||
"ElementHandle.hover",
|
|
||||||
"ElementHandle.innerHTML",
|
|
||||||
"ElementHandle.innerText",
|
|
||||||
"ElementHandle.inputValue",
|
|
||||||
"ElementHandle.isChecked",
|
|
||||||
"ElementHandle.isDisabled",
|
|
||||||
"ElementHandle.isEditable",
|
|
||||||
"ElementHandle.isEnabled",
|
|
||||||
"ElementHandle.isHidden",
|
|
||||||
"ElementHandle.isVisible",
|
|
||||||
"ElementHandle.press",
|
|
||||||
"ElementHandle.querySelector",
|
|
||||||
"ElementHandle.querySelectorAll",
|
|
||||||
"ElementHandle.screenshot",
|
|
||||||
"ElementHandle.scrollIntoViewIfNeeded",
|
|
||||||
"ElementHandle.selectOption",
|
|
||||||
"ElementHandle.selectText",
|
|
||||||
"ElementHandle.setInputFiles",
|
|
||||||
"ElementHandle.tap",
|
|
||||||
"ElementHandle.textContent",
|
|
||||||
"ElementHandle.type",
|
|
||||||
"ElementHandle.uncheck",
|
|
||||||
"ElementHandle.waitForElementState",
|
|
||||||
"ElementHandle.waitForSelector"
|
|
||||||
]);
|
|
||||||
const pausesBeforeInputActions = /* @__PURE__ */ new Set([
|
|
||||||
"Frame.check",
|
|
||||||
"Frame.click",
|
|
||||||
"Frame.dragAndDrop",
|
|
||||||
"Frame.dblclick",
|
|
||||||
"Frame.fill",
|
|
||||||
"Frame.hover",
|
|
||||||
"Frame.press",
|
|
||||||
"Frame.selectOption",
|
|
||||||
"Frame.setInputFiles",
|
|
||||||
"Frame.tap",
|
|
||||||
"Frame.type",
|
|
||||||
"Frame.uncheck",
|
|
||||||
"ElementHandle.check",
|
|
||||||
"ElementHandle.click",
|
|
||||||
"ElementHandle.dblclick",
|
|
||||||
"ElementHandle.fill",
|
|
||||||
"ElementHandle.hover",
|
|
||||||
"ElementHandle.press",
|
|
||||||
"ElementHandle.selectOption",
|
|
||||||
"ElementHandle.setInputFiles",
|
|
||||||
"ElementHandle.tap",
|
|
||||||
"ElementHandle.type",
|
|
||||||
"ElementHandle.uncheck"
|
|
||||||
]);
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
commandsWithTracingSnapshots,
|
|
||||||
pausesBeforeInputActions,
|
|
||||||
slowMoActions
|
|
||||||
});
|
|
||||||
192
tvapp2/node_modules/playwright-core/lib/protocol/serializers.js
generated
vendored
192
tvapp2/node_modules/playwright-core/lib/protocol/serializers.js
generated
vendored
@@ -1,192 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var serializers_exports = {};
|
|
||||||
__export(serializers_exports, {
|
|
||||||
parseSerializedValue: () => parseSerializedValue,
|
|
||||||
serializeValue: () => serializeValue
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(serializers_exports);
|
|
||||||
function parseSerializedValue(value, handles) {
|
|
||||||
return innerParseSerializedValue(value, handles, /* @__PURE__ */ new Map(), []);
|
|
||||||
}
|
|
||||||
function innerParseSerializedValue(value, handles, refs, accessChain) {
|
|
||||||
if (value.ref !== void 0)
|
|
||||||
return refs.get(value.ref);
|
|
||||||
if (value.n !== void 0)
|
|
||||||
return value.n;
|
|
||||||
if (value.s !== void 0)
|
|
||||||
return value.s;
|
|
||||||
if (value.b !== void 0)
|
|
||||||
return value.b;
|
|
||||||
if (value.v !== void 0) {
|
|
||||||
if (value.v === "undefined")
|
|
||||||
return void 0;
|
|
||||||
if (value.v === "null")
|
|
||||||
return null;
|
|
||||||
if (value.v === "NaN")
|
|
||||||
return NaN;
|
|
||||||
if (value.v === "Infinity")
|
|
||||||
return Infinity;
|
|
||||||
if (value.v === "-Infinity")
|
|
||||||
return -Infinity;
|
|
||||||
if (value.v === "-0")
|
|
||||||
return -0;
|
|
||||||
}
|
|
||||||
if (value.d !== void 0)
|
|
||||||
return new Date(value.d);
|
|
||||||
if (value.u !== void 0)
|
|
||||||
return new URL(value.u);
|
|
||||||
if (value.bi !== void 0)
|
|
||||||
return BigInt(value.bi);
|
|
||||||
if (value.e !== void 0) {
|
|
||||||
const error = new Error(value.e.m);
|
|
||||||
error.name = value.e.n;
|
|
||||||
error.stack = value.e.s;
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
if (value.r !== void 0)
|
|
||||||
return new RegExp(value.r.p, value.r.f);
|
|
||||||
if (value.ta !== void 0) {
|
|
||||||
const ctor = typedArrayKindToConstructor[value.ta.k];
|
|
||||||
return new ctor(value.ta.b.buffer, value.ta.b.byteOffset, value.ta.b.length / ctor.BYTES_PER_ELEMENT);
|
|
||||||
}
|
|
||||||
if (value.a !== void 0) {
|
|
||||||
const result = [];
|
|
||||||
refs.set(value.id, result);
|
|
||||||
for (let i = 0; i < value.a.length; i++)
|
|
||||||
result.push(innerParseSerializedValue(value.a[i], handles, refs, [...accessChain, i]));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
if (value.o !== void 0) {
|
|
||||||
const result = {};
|
|
||||||
refs.set(value.id, result);
|
|
||||||
for (const { k, v } of value.o)
|
|
||||||
result[k] = innerParseSerializedValue(v, handles, refs, [...accessChain, k]);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
if (value.h !== void 0) {
|
|
||||||
if (handles === void 0)
|
|
||||||
throw new Error("Unexpected handle");
|
|
||||||
return handles[value.h];
|
|
||||||
}
|
|
||||||
throw new Error(`Attempting to deserialize unexpected value${accessChainToDisplayString(accessChain)}: ${value}`);
|
|
||||||
}
|
|
||||||
function serializeValue(value, handleSerializer) {
|
|
||||||
return innerSerializeValue(value, handleSerializer, { lastId: 0, visited: /* @__PURE__ */ new Map() }, []);
|
|
||||||
}
|
|
||||||
function innerSerializeValue(value, handleSerializer, visitorInfo, accessChain) {
|
|
||||||
const handle = handleSerializer(value);
|
|
||||||
if ("fallThrough" in handle)
|
|
||||||
value = handle.fallThrough;
|
|
||||||
else
|
|
||||||
return handle;
|
|
||||||
if (typeof value === "symbol")
|
|
||||||
return { v: "undefined" };
|
|
||||||
if (Object.is(value, void 0))
|
|
||||||
return { v: "undefined" };
|
|
||||||
if (Object.is(value, null))
|
|
||||||
return { v: "null" };
|
|
||||||
if (Object.is(value, NaN))
|
|
||||||
return { v: "NaN" };
|
|
||||||
if (Object.is(value, Infinity))
|
|
||||||
return { v: "Infinity" };
|
|
||||||
if (Object.is(value, -Infinity))
|
|
||||||
return { v: "-Infinity" };
|
|
||||||
if (Object.is(value, -0))
|
|
||||||
return { v: "-0" };
|
|
||||||
if (typeof value === "boolean")
|
|
||||||
return { b: value };
|
|
||||||
if (typeof value === "number")
|
|
||||||
return { n: value };
|
|
||||||
if (typeof value === "string")
|
|
||||||
return { s: value };
|
|
||||||
if (typeof value === "bigint")
|
|
||||||
return { bi: value.toString() };
|
|
||||||
if (isError(value))
|
|
||||||
return { e: { n: value.name, m: value.message, s: value.stack || "" } };
|
|
||||||
if (isDate(value))
|
|
||||||
return { d: value.toJSON() };
|
|
||||||
if (isURL(value))
|
|
||||||
return { u: value.toJSON() };
|
|
||||||
if (isRegExp(value))
|
|
||||||
return { r: { p: value.source, f: value.flags } };
|
|
||||||
const typedArrayKind = constructorToTypedArrayKind.get(value.constructor);
|
|
||||||
if (typedArrayKind)
|
|
||||||
return { ta: { b: Buffer.from(value.buffer, value.byteOffset, value.byteLength), k: typedArrayKind } };
|
|
||||||
const id = visitorInfo.visited.get(value);
|
|
||||||
if (id)
|
|
||||||
return { ref: id };
|
|
||||||
if (Array.isArray(value)) {
|
|
||||||
const a = [];
|
|
||||||
const id2 = ++visitorInfo.lastId;
|
|
||||||
visitorInfo.visited.set(value, id2);
|
|
||||||
for (let i = 0; i < value.length; ++i)
|
|
||||||
a.push(innerSerializeValue(value[i], handleSerializer, visitorInfo, [...accessChain, i]));
|
|
||||||
return { a, id: id2 };
|
|
||||||
}
|
|
||||||
if (typeof value === "object") {
|
|
||||||
const o = [];
|
|
||||||
const id2 = ++visitorInfo.lastId;
|
|
||||||
visitorInfo.visited.set(value, id2);
|
|
||||||
for (const name of Object.keys(value))
|
|
||||||
o.push({ k: name, v: innerSerializeValue(value[name], handleSerializer, visitorInfo, [...accessChain, name]) });
|
|
||||||
return { o, id: id2 };
|
|
||||||
}
|
|
||||||
throw new Error(`Attempting to serialize unexpected value${accessChainToDisplayString(accessChain)}: ${value}`);
|
|
||||||
}
|
|
||||||
function accessChainToDisplayString(accessChain) {
|
|
||||||
const chainString = accessChain.map((accessor, i) => {
|
|
||||||
if (typeof accessor === "string")
|
|
||||||
return i ? `.${accessor}` : accessor;
|
|
||||||
return `[${accessor}]`;
|
|
||||||
}).join("");
|
|
||||||
return chainString.length > 0 ? ` at position "${chainString}"` : "";
|
|
||||||
}
|
|
||||||
function isRegExp(obj) {
|
|
||||||
return obj instanceof RegExp || Object.prototype.toString.call(obj) === "[object RegExp]";
|
|
||||||
}
|
|
||||||
function isDate(obj) {
|
|
||||||
return obj instanceof Date || Object.prototype.toString.call(obj) === "[object Date]";
|
|
||||||
}
|
|
||||||
function isURL(obj) {
|
|
||||||
return obj instanceof URL || Object.prototype.toString.call(obj) === "[object URL]";
|
|
||||||
}
|
|
||||||
function isError(obj) {
|
|
||||||
const proto = obj ? Object.getPrototypeOf(obj) : null;
|
|
||||||
return obj instanceof Error || proto?.name === "Error" || proto && isError(proto);
|
|
||||||
}
|
|
||||||
const typedArrayKindToConstructor = {
|
|
||||||
i8: Int8Array,
|
|
||||||
ui8: Uint8Array,
|
|
||||||
ui8c: Uint8ClampedArray,
|
|
||||||
i16: Int16Array,
|
|
||||||
ui16: Uint16Array,
|
|
||||||
i32: Int32Array,
|
|
||||||
ui32: Uint32Array,
|
|
||||||
f32: Float32Array,
|
|
||||||
f64: Float64Array,
|
|
||||||
bi64: BigInt64Array,
|
|
||||||
bui64: BigUint64Array
|
|
||||||
};
|
|
||||||
const constructorToTypedArrayKind = new Map(Object.entries(typedArrayKindToConstructor).map(([k, v]) => [v, k]));
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
parseSerializedValue,
|
|
||||||
serializeValue
|
|
||||||
});
|
|
||||||
2825
tvapp2/node_modules/playwright-core/lib/protocol/validator.js
generated
vendored
2825
tvapp2/node_modules/playwright-core/lib/protocol/validator.js
generated
vendored
File diff suppressed because it is too large
Load Diff
179
tvapp2/node_modules/playwright-core/lib/protocol/validatorPrimitives.js
generated
vendored
179
tvapp2/node_modules/playwright-core/lib/protocol/validatorPrimitives.js
generated
vendored
@@ -1,179 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var validatorPrimitives_exports = {};
|
|
||||||
__export(validatorPrimitives_exports, {
|
|
||||||
ValidationError: () => ValidationError,
|
|
||||||
createMetadataValidator: () => createMetadataValidator,
|
|
||||||
findValidator: () => findValidator,
|
|
||||||
maybeFindValidator: () => maybeFindValidator,
|
|
||||||
scheme: () => scheme,
|
|
||||||
tAny: () => tAny,
|
|
||||||
tArray: () => tArray,
|
|
||||||
tBinary: () => tBinary,
|
|
||||||
tBoolean: () => tBoolean,
|
|
||||||
tChannel: () => tChannel,
|
|
||||||
tEnum: () => tEnum,
|
|
||||||
tNumber: () => tNumber,
|
|
||||||
tObject: () => tObject,
|
|
||||||
tOptional: () => tOptional,
|
|
||||||
tString: () => tString,
|
|
||||||
tType: () => tType,
|
|
||||||
tUndefined: () => tUndefined
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(validatorPrimitives_exports);
|
|
||||||
class ValidationError extends Error {
|
|
||||||
}
|
|
||||||
const scheme = {};
|
|
||||||
function findValidator(type, method, kind) {
|
|
||||||
const validator = maybeFindValidator(type, method, kind);
|
|
||||||
if (!validator)
|
|
||||||
throw new ValidationError(`Unknown scheme for ${kind}: ${type}.${method}`);
|
|
||||||
return validator;
|
|
||||||
}
|
|
||||||
function maybeFindValidator(type, method, kind) {
|
|
||||||
const schemeName = type + (kind === "Initializer" ? "" : method[0].toUpperCase() + method.substring(1)) + kind;
|
|
||||||
return scheme[schemeName];
|
|
||||||
}
|
|
||||||
function createMetadataValidator() {
|
|
||||||
return tOptional(scheme["Metadata"]);
|
|
||||||
}
|
|
||||||
const tNumber = (arg, path, context) => {
|
|
||||||
if (arg instanceof Number)
|
|
||||||
return arg.valueOf();
|
|
||||||
if (typeof arg === "number")
|
|
||||||
return arg;
|
|
||||||
throw new ValidationError(`${path}: expected number, got ${typeof arg}`);
|
|
||||||
};
|
|
||||||
const tBoolean = (arg, path, context) => {
|
|
||||||
if (arg instanceof Boolean)
|
|
||||||
return arg.valueOf();
|
|
||||||
if (typeof arg === "boolean")
|
|
||||||
return arg;
|
|
||||||
throw new ValidationError(`${path}: expected boolean, got ${typeof arg}`);
|
|
||||||
};
|
|
||||||
const tString = (arg, path, context) => {
|
|
||||||
if (arg instanceof String)
|
|
||||||
return arg.valueOf();
|
|
||||||
if (typeof arg === "string")
|
|
||||||
return arg;
|
|
||||||
throw new ValidationError(`${path}: expected string, got ${typeof arg}`);
|
|
||||||
};
|
|
||||||
const tBinary = (arg, path, context) => {
|
|
||||||
if (context.binary === "fromBase64") {
|
|
||||||
if (arg instanceof String)
|
|
||||||
return Buffer.from(arg.valueOf(), "base64");
|
|
||||||
if (typeof arg === "string")
|
|
||||||
return Buffer.from(arg, "base64");
|
|
||||||
throw new ValidationError(`${path}: expected base64-encoded buffer, got ${typeof arg}`);
|
|
||||||
}
|
|
||||||
if (context.binary === "toBase64") {
|
|
||||||
if (!(arg instanceof Buffer))
|
|
||||||
throw new ValidationError(`${path}: expected Buffer, got ${typeof arg}`);
|
|
||||||
return arg.toString("base64");
|
|
||||||
}
|
|
||||||
if (context.binary === "buffer") {
|
|
||||||
if (!(arg instanceof Buffer))
|
|
||||||
throw new ValidationError(`${path}: expected Buffer, got ${typeof arg}`);
|
|
||||||
return arg;
|
|
||||||
}
|
|
||||||
throw new ValidationError(`Unsupported binary behavior "${context.binary}"`);
|
|
||||||
};
|
|
||||||
const tUndefined = (arg, path, context) => {
|
|
||||||
if (Object.is(arg, void 0))
|
|
||||||
return arg;
|
|
||||||
throw new ValidationError(`${path}: expected undefined, got ${typeof arg}`);
|
|
||||||
};
|
|
||||||
const tAny = (arg, path, context) => {
|
|
||||||
return arg;
|
|
||||||
};
|
|
||||||
const tOptional = (v) => {
|
|
||||||
return (arg, path, context) => {
|
|
||||||
if (Object.is(arg, void 0))
|
|
||||||
return arg;
|
|
||||||
return v(arg, path, context);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
const tArray = (v) => {
|
|
||||||
return (arg, path, context) => {
|
|
||||||
if (!Array.isArray(arg))
|
|
||||||
throw new ValidationError(`${path}: expected array, got ${typeof arg}`);
|
|
||||||
return arg.map((x, index) => v(x, path + "[" + index + "]", context));
|
|
||||||
};
|
|
||||||
};
|
|
||||||
const tObject = (s) => {
|
|
||||||
return (arg, path, context) => {
|
|
||||||
if (Object.is(arg, null))
|
|
||||||
throw new ValidationError(`${path}: expected object, got null`);
|
|
||||||
if (typeof arg !== "object")
|
|
||||||
throw new ValidationError(`${path}: expected object, got ${typeof arg}`);
|
|
||||||
const result = {};
|
|
||||||
for (const [key, v] of Object.entries(s)) {
|
|
||||||
const value = v(arg[key], path ? path + "." + key : key, context);
|
|
||||||
if (!Object.is(value, void 0))
|
|
||||||
result[key] = value;
|
|
||||||
}
|
|
||||||
if (context.isUnderTest()) {
|
|
||||||
for (const [key, value] of Object.entries(arg)) {
|
|
||||||
if (key.startsWith("__testHook"))
|
|
||||||
result[key] = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
const tEnum = (e) => {
|
|
||||||
return (arg, path, context) => {
|
|
||||||
if (!e.includes(arg))
|
|
||||||
throw new ValidationError(`${path}: expected one of (${e.join("|")})`);
|
|
||||||
return arg;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
const tChannel = (names) => {
|
|
||||||
return (arg, path, context) => {
|
|
||||||
return context.tChannelImpl(names, arg, path, context);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
const tType = (name) => {
|
|
||||||
return (arg, path, context) => {
|
|
||||||
const v = scheme[name];
|
|
||||||
if (!v)
|
|
||||||
throw new ValidationError(path + ': unknown type "' + name + '"');
|
|
||||||
return v(arg, path, context);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
ValidationError,
|
|
||||||
createMetadataValidator,
|
|
||||||
findValidator,
|
|
||||||
maybeFindValidator,
|
|
||||||
scheme,
|
|
||||||
tAny,
|
|
||||||
tArray,
|
|
||||||
tBinary,
|
|
||||||
tBoolean,
|
|
||||||
tChannel,
|
|
||||||
tEnum,
|
|
||||||
tNumber,
|
|
||||||
tObject,
|
|
||||||
tOptional,
|
|
||||||
tString,
|
|
||||||
tType,
|
|
||||||
tUndefined
|
|
||||||
});
|
|
||||||
266
tvapp2/node_modules/playwright-core/lib/remote/playwrightConnection.js
generated
vendored
266
tvapp2/node_modules/playwright-core/lib/remote/playwrightConnection.js
generated
vendored
@@ -1,266 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var playwrightConnection_exports = {};
|
|
||||||
__export(playwrightConnection_exports, {
|
|
||||||
PlaywrightConnection: () => PlaywrightConnection
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(playwrightConnection_exports);
|
|
||||||
var import_socksProxy = require("../server/utils/socksProxy");
|
|
||||||
var import_server = require("../server");
|
|
||||||
var import_android = require("../server/android/android");
|
|
||||||
var import_browser = require("../server/browser");
|
|
||||||
var import_debugControllerDispatcher = require("../server/dispatchers/debugControllerDispatcher");
|
|
||||||
var import_instrumentation = require("../server/instrumentation");
|
|
||||||
var import_assert = require("../utils/isomorphic/assert");
|
|
||||||
var import_debug = require("../server/utils/debug");
|
|
||||||
var import_profiler = require("../server/utils/profiler");
|
|
||||||
var import_utils = require("../utils");
|
|
||||||
var import_debugLogger = require("../server/utils/debugLogger");
|
|
||||||
class PlaywrightConnection {
|
|
||||||
constructor(lock, clientType, ws, options, preLaunched, id, onClose) {
|
|
||||||
this._cleanups = [];
|
|
||||||
this._disconnected = false;
|
|
||||||
this._ws = ws;
|
|
||||||
this._preLaunched = preLaunched;
|
|
||||||
this._options = options;
|
|
||||||
options.launchOptions = filterLaunchOptions(options.launchOptions, options.allowFSPaths);
|
|
||||||
if (clientType === "reuse-browser" || clientType === "pre-launched-browser-or-android")
|
|
||||||
(0, import_assert.assert)(preLaunched.playwright);
|
|
||||||
if (clientType === "pre-launched-browser-or-android")
|
|
||||||
(0, import_assert.assert)(preLaunched.browser || preLaunched.androidDevice);
|
|
||||||
this._onClose = onClose;
|
|
||||||
this._id = id;
|
|
||||||
this._profileName = `${(/* @__PURE__ */ new Date()).toISOString()}-${clientType}`;
|
|
||||||
this._dispatcherConnection = new import_server.DispatcherConnection();
|
|
||||||
this._dispatcherConnection.onmessage = async (message) => {
|
|
||||||
await lock;
|
|
||||||
if (ws.readyState !== ws.CLOSING) {
|
|
||||||
const messageString = JSON.stringify(message);
|
|
||||||
if (import_debugLogger.debugLogger.isEnabled("server:channel"))
|
|
||||||
import_debugLogger.debugLogger.log("server:channel", `[${this._id}] ${(0, import_utils.monotonicTime)() * 1e3} SEND \u25BA ${messageString}`);
|
|
||||||
if (import_debugLogger.debugLogger.isEnabled("server:metadata"))
|
|
||||||
this.logServerMetadata(message, messageString, "SEND");
|
|
||||||
ws.send(messageString);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
ws.on("message", async (message) => {
|
|
||||||
await lock;
|
|
||||||
const messageString = Buffer.from(message).toString();
|
|
||||||
const jsonMessage = JSON.parse(messageString);
|
|
||||||
if (import_debugLogger.debugLogger.isEnabled("server:channel"))
|
|
||||||
import_debugLogger.debugLogger.log("server:channel", `[${this._id}] ${(0, import_utils.monotonicTime)() * 1e3} \u25C0 RECV ${messageString}`);
|
|
||||||
if (import_debugLogger.debugLogger.isEnabled("server:metadata"))
|
|
||||||
this.logServerMetadata(jsonMessage, messageString, "RECV");
|
|
||||||
this._dispatcherConnection.dispatch(jsonMessage);
|
|
||||||
});
|
|
||||||
ws.on("close", () => this._onDisconnect());
|
|
||||||
ws.on("error", (error) => this._onDisconnect(error));
|
|
||||||
if (clientType === "controller") {
|
|
||||||
this._root = this._initDebugControllerMode();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this._root = new import_server.RootDispatcher(this._dispatcherConnection, async (scope, options2) => {
|
|
||||||
await (0, import_profiler.startProfiling)();
|
|
||||||
if (clientType === "reuse-browser")
|
|
||||||
return await this._initReuseBrowsersMode(scope);
|
|
||||||
if (clientType === "pre-launched-browser-or-android")
|
|
||||||
return this._preLaunched.browser ? await this._initPreLaunchedBrowserMode(scope) : await this._initPreLaunchedAndroidMode(scope);
|
|
||||||
if (clientType === "launch-browser")
|
|
||||||
return await this._initLaunchBrowserMode(scope, options2);
|
|
||||||
throw new Error("Unsupported client type: " + clientType);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async _initLaunchBrowserMode(scope, options) {
|
|
||||||
import_debugLogger.debugLogger.log("server", `[${this._id}] engaged launch mode for "${this._options.browserName}"`);
|
|
||||||
const playwright = (0, import_server.createPlaywright)({ sdkLanguage: options.sdkLanguage, isServer: true });
|
|
||||||
const ownedSocksProxy = await this._createOwnedSocksProxy(playwright);
|
|
||||||
let browserName = this._options.browserName;
|
|
||||||
if ("bidi" === browserName) {
|
|
||||||
if (this._options.launchOptions?.channel?.toLocaleLowerCase().includes("firefox"))
|
|
||||||
browserName = "bidiFirefox";
|
|
||||||
else
|
|
||||||
browserName = "bidiChromium";
|
|
||||||
}
|
|
||||||
const browser = await playwright[browserName].launch((0, import_instrumentation.serverSideCallMetadata)(), this._options.launchOptions);
|
|
||||||
this._cleanups.push(async () => {
|
|
||||||
for (const browser2 of playwright.allBrowsers())
|
|
||||||
await browser2.close({ reason: "Connection terminated" });
|
|
||||||
});
|
|
||||||
browser.on(import_browser.Browser.Events.Disconnected, () => {
|
|
||||||
this.close({ code: 1001, reason: "Browser closed" });
|
|
||||||
});
|
|
||||||
return new import_server.PlaywrightDispatcher(scope, playwright, ownedSocksProxy, browser);
|
|
||||||
}
|
|
||||||
async _initPreLaunchedBrowserMode(scope) {
|
|
||||||
import_debugLogger.debugLogger.log("server", `[${this._id}] engaged pre-launched (browser) mode`);
|
|
||||||
const playwright = this._preLaunched.playwright;
|
|
||||||
this._preLaunched.socksProxy?.setPattern(this._options.socksProxyPattern);
|
|
||||||
const browser = this._preLaunched.browser;
|
|
||||||
browser.on(import_browser.Browser.Events.Disconnected, () => {
|
|
||||||
this.close({ code: 1001, reason: "Browser closed" });
|
|
||||||
});
|
|
||||||
const playwrightDispatcher = new import_server.PlaywrightDispatcher(scope, playwright, this._preLaunched.socksProxy, browser);
|
|
||||||
for (const b of playwright.allBrowsers()) {
|
|
||||||
if (b !== browser)
|
|
||||||
await b.close({ reason: "Connection terminated" });
|
|
||||||
}
|
|
||||||
this._cleanups.push(() => playwrightDispatcher.cleanup());
|
|
||||||
return playwrightDispatcher;
|
|
||||||
}
|
|
||||||
async _initPreLaunchedAndroidMode(scope) {
|
|
||||||
import_debugLogger.debugLogger.log("server", `[${this._id}] engaged pre-launched (Android) mode`);
|
|
||||||
const playwright = this._preLaunched.playwright;
|
|
||||||
const androidDevice = this._preLaunched.androidDevice;
|
|
||||||
androidDevice.on(import_android.AndroidDevice.Events.Close, () => {
|
|
||||||
this.close({ code: 1001, reason: "Android device disconnected" });
|
|
||||||
});
|
|
||||||
const playwrightDispatcher = new import_server.PlaywrightDispatcher(scope, playwright, void 0, void 0, androidDevice);
|
|
||||||
this._cleanups.push(() => playwrightDispatcher.cleanup());
|
|
||||||
return playwrightDispatcher;
|
|
||||||
}
|
|
||||||
_initDebugControllerMode() {
|
|
||||||
import_debugLogger.debugLogger.log("server", `[${this._id}] engaged reuse controller mode`);
|
|
||||||
const playwright = this._preLaunched.playwright;
|
|
||||||
return new import_debugControllerDispatcher.DebugControllerDispatcher(this._dispatcherConnection, playwright.debugController);
|
|
||||||
}
|
|
||||||
async _initReuseBrowsersMode(scope) {
|
|
||||||
import_debugLogger.debugLogger.log("server", `[${this._id}] engaged reuse browsers mode for ${this._options.browserName}`);
|
|
||||||
const playwright = this._preLaunched.playwright;
|
|
||||||
const requestedOptions = launchOptionsHash(this._options.launchOptions);
|
|
||||||
let browser = playwright.allBrowsers().find((b) => {
|
|
||||||
if (b.options.name !== this._options.browserName)
|
|
||||||
return false;
|
|
||||||
const existingOptions = launchOptionsHash(b.options.originalLaunchOptions);
|
|
||||||
return existingOptions === requestedOptions;
|
|
||||||
});
|
|
||||||
for (const b of playwright.allBrowsers()) {
|
|
||||||
if (b === browser)
|
|
||||||
continue;
|
|
||||||
if (b.options.name === this._options.browserName && b.options.channel === this._options.launchOptions.channel)
|
|
||||||
await b.close({ reason: "Connection terminated" });
|
|
||||||
}
|
|
||||||
if (!browser) {
|
|
||||||
browser = await playwright[this._options.browserName || "chromium"].launch((0, import_instrumentation.serverSideCallMetadata)(), {
|
|
||||||
...this._options.launchOptions,
|
|
||||||
headless: !!process.env.PW_DEBUG_CONTROLLER_HEADLESS
|
|
||||||
});
|
|
||||||
browser.on(import_browser.Browser.Events.Disconnected, () => {
|
|
||||||
this.close({ code: 1001, reason: "Browser closed" });
|
|
||||||
});
|
|
||||||
}
|
|
||||||
this._cleanups.push(async () => {
|
|
||||||
for (const browser2 of playwright.allBrowsers()) {
|
|
||||||
for (const context of browser2.contexts()) {
|
|
||||||
if (!context.pages().length)
|
|
||||||
await context.close({ reason: "Connection terminated" });
|
|
||||||
else
|
|
||||||
await context.stopPendingOperations("Connection closed");
|
|
||||||
}
|
|
||||||
if (!browser2.contexts())
|
|
||||||
await browser2.close({ reason: "Connection terminated" });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const playwrightDispatcher = new import_server.PlaywrightDispatcher(scope, playwright, void 0, browser);
|
|
||||||
return playwrightDispatcher;
|
|
||||||
}
|
|
||||||
async _createOwnedSocksProxy(playwright) {
|
|
||||||
if (!this._options.socksProxyPattern)
|
|
||||||
return;
|
|
||||||
const socksProxy = new import_socksProxy.SocksProxy();
|
|
||||||
socksProxy.setPattern(this._options.socksProxyPattern);
|
|
||||||
playwright.options.socksProxyPort = await socksProxy.listen(0);
|
|
||||||
import_debugLogger.debugLogger.log("server", `[${this._id}] started socks proxy on port ${playwright.options.socksProxyPort}`);
|
|
||||||
this._cleanups.push(() => socksProxy.close());
|
|
||||||
return socksProxy;
|
|
||||||
}
|
|
||||||
async _onDisconnect(error) {
|
|
||||||
this._disconnected = true;
|
|
||||||
import_debugLogger.debugLogger.log("server", `[${this._id}] disconnected. error: ${error}`);
|
|
||||||
this._root._dispose();
|
|
||||||
import_debugLogger.debugLogger.log("server", `[${this._id}] starting cleanup`);
|
|
||||||
for (const cleanup of this._cleanups)
|
|
||||||
await cleanup().catch(() => {
|
|
||||||
});
|
|
||||||
await (0, import_profiler.stopProfiling)(this._profileName);
|
|
||||||
this._onClose();
|
|
||||||
import_debugLogger.debugLogger.log("server", `[${this._id}] finished cleanup`);
|
|
||||||
}
|
|
||||||
logServerMetadata(message, messageString, direction) {
|
|
||||||
const serverLogMetadata = {
|
|
||||||
wallTime: Date.now(),
|
|
||||||
id: message.id,
|
|
||||||
guid: message.guid,
|
|
||||||
method: message.method,
|
|
||||||
payloadSizeInBytes: Buffer.byteLength(messageString, "utf-8")
|
|
||||||
};
|
|
||||||
import_debugLogger.debugLogger.log("server:metadata", (direction === "SEND" ? "SEND \u25BA " : "\u25C0 RECV ") + JSON.stringify(serverLogMetadata));
|
|
||||||
}
|
|
||||||
async close(reason) {
|
|
||||||
if (this._disconnected)
|
|
||||||
return;
|
|
||||||
import_debugLogger.debugLogger.log("server", `[${this._id}] force closing connection: ${reason?.reason || ""} (${reason?.code || 0})`);
|
|
||||||
try {
|
|
||||||
this._ws.close(reason?.code, reason?.reason);
|
|
||||||
} catch (e) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function launchOptionsHash(options) {
|
|
||||||
const copy = { ...options };
|
|
||||||
for (const k of Object.keys(copy)) {
|
|
||||||
const key = k;
|
|
||||||
if (copy[key] === defaultLaunchOptions[key])
|
|
||||||
delete copy[key];
|
|
||||||
}
|
|
||||||
for (const key of optionsThatAllowBrowserReuse)
|
|
||||||
delete copy[key];
|
|
||||||
return JSON.stringify(copy);
|
|
||||||
}
|
|
||||||
function filterLaunchOptions(options, allowFSPaths) {
|
|
||||||
return {
|
|
||||||
channel: options.channel,
|
|
||||||
args: options.args,
|
|
||||||
ignoreAllDefaultArgs: options.ignoreAllDefaultArgs,
|
|
||||||
ignoreDefaultArgs: options.ignoreDefaultArgs,
|
|
||||||
timeout: options.timeout,
|
|
||||||
headless: options.headless,
|
|
||||||
proxy: options.proxy,
|
|
||||||
chromiumSandbox: options.chromiumSandbox,
|
|
||||||
firefoxUserPrefs: options.firefoxUserPrefs,
|
|
||||||
slowMo: options.slowMo,
|
|
||||||
executablePath: (0, import_debug.isUnderTest)() || allowFSPaths ? options.executablePath : void 0,
|
|
||||||
downloadsPath: allowFSPaths ? options.downloadsPath : void 0
|
|
||||||
};
|
|
||||||
}
|
|
||||||
const defaultLaunchOptions = {
|
|
||||||
ignoreAllDefaultArgs: false,
|
|
||||||
handleSIGINT: false,
|
|
||||||
handleSIGTERM: false,
|
|
||||||
handleSIGHUP: false,
|
|
||||||
headless: true,
|
|
||||||
devtools: false
|
|
||||||
};
|
|
||||||
const optionsThatAllowBrowserReuse = [
|
|
||||||
"headless",
|
|
||||||
"tracesDir"
|
|
||||||
];
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
PlaywrightConnection
|
|
||||||
});
|
|
||||||
139
tvapp2/node_modules/playwright-core/lib/remote/playwrightServer.js
generated
vendored
139
tvapp2/node_modules/playwright-core/lib/remote/playwrightServer.js
generated
vendored
@@ -1,139 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var playwrightServer_exports = {};
|
|
||||||
__export(playwrightServer_exports, {
|
|
||||||
PlaywrightServer: () => PlaywrightServer
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(playwrightServer_exports);
|
|
||||||
var import_playwrightConnection = require("./playwrightConnection");
|
|
||||||
var import_playwright = require("../server/playwright");
|
|
||||||
var import_debugLogger = require("../server/utils/debugLogger");
|
|
||||||
var import_semaphore = require("../utils/isomorphic/semaphore");
|
|
||||||
var import_wsServer = require("../server/utils/wsServer");
|
|
||||||
var import_ascii = require("../server/utils/ascii");
|
|
||||||
var import_userAgent = require("../server/utils/userAgent");
|
|
||||||
class PlaywrightServer {
|
|
||||||
constructor(options) {
|
|
||||||
this._options = options;
|
|
||||||
if (options.preLaunchedBrowser)
|
|
||||||
this._preLaunchedPlaywright = options.preLaunchedBrowser.attribution.playwright;
|
|
||||||
if (options.preLaunchedAndroidDevice)
|
|
||||||
this._preLaunchedPlaywright = options.preLaunchedAndroidDevice._android.attribution.playwright;
|
|
||||||
const browserSemaphore = new import_semaphore.Semaphore(this._options.maxConnections);
|
|
||||||
const controllerSemaphore = new import_semaphore.Semaphore(1);
|
|
||||||
const reuseBrowserSemaphore = new import_semaphore.Semaphore(1);
|
|
||||||
this._wsServer = new import_wsServer.WSServer({
|
|
||||||
onUpgrade: (request, socket) => {
|
|
||||||
const uaError = userAgentVersionMatchesErrorMessage(request.headers["user-agent"] || "");
|
|
||||||
if (uaError)
|
|
||||||
return { error: `HTTP/${request.httpVersion} 428 Precondition Required\r
|
|
||||||
\r
|
|
||||||
${uaError}` };
|
|
||||||
},
|
|
||||||
onHeaders: (headers) => {
|
|
||||||
if (process.env.PWTEST_SERVER_WS_HEADERS)
|
|
||||||
headers.push(process.env.PWTEST_SERVER_WS_HEADERS);
|
|
||||||
},
|
|
||||||
onConnection: (request, url, ws, id) => {
|
|
||||||
const browserHeader = request.headers["x-playwright-browser"];
|
|
||||||
const browserName = url.searchParams.get("browser") || (Array.isArray(browserHeader) ? browserHeader[0] : browserHeader) || null;
|
|
||||||
const proxyHeader = request.headers["x-playwright-proxy"];
|
|
||||||
const proxyValue = url.searchParams.get("proxy") || (Array.isArray(proxyHeader) ? proxyHeader[0] : proxyHeader);
|
|
||||||
const launchOptionsHeader = request.headers["x-playwright-launch-options"] || "";
|
|
||||||
const launchOptionsHeaderValue = Array.isArray(launchOptionsHeader) ? launchOptionsHeader[0] : launchOptionsHeader;
|
|
||||||
const launchOptionsParam = url.searchParams.get("launch-options");
|
|
||||||
let launchOptions = {};
|
|
||||||
try {
|
|
||||||
launchOptions = JSON.parse(launchOptionsParam || launchOptionsHeaderValue);
|
|
||||||
} catch (e) {
|
|
||||||
}
|
|
||||||
const isExtension = this._options.mode === "extension";
|
|
||||||
if (isExtension) {
|
|
||||||
if (!this._preLaunchedPlaywright)
|
|
||||||
this._preLaunchedPlaywright = (0, import_playwright.createPlaywright)({ sdkLanguage: "javascript", isServer: true });
|
|
||||||
}
|
|
||||||
let clientType = "launch-browser";
|
|
||||||
let semaphore = browserSemaphore;
|
|
||||||
if (isExtension && url.searchParams.has("debug-controller")) {
|
|
||||||
clientType = "controller";
|
|
||||||
semaphore = controllerSemaphore;
|
|
||||||
} else if (isExtension) {
|
|
||||||
clientType = "reuse-browser";
|
|
||||||
semaphore = reuseBrowserSemaphore;
|
|
||||||
} else if (this._options.mode === "launchServer") {
|
|
||||||
clientType = "pre-launched-browser-or-android";
|
|
||||||
semaphore = browserSemaphore;
|
|
||||||
}
|
|
||||||
return new import_playwrightConnection.PlaywrightConnection(
|
|
||||||
semaphore.acquire(),
|
|
||||||
clientType,
|
|
||||||
ws,
|
|
||||||
{ socksProxyPattern: proxyValue, browserName, launchOptions, allowFSPaths: this._options.mode === "extension" },
|
|
||||||
{
|
|
||||||
playwright: this._preLaunchedPlaywright,
|
|
||||||
browser: this._options.preLaunchedBrowser,
|
|
||||||
androidDevice: this._options.preLaunchedAndroidDevice,
|
|
||||||
socksProxy: this._options.preLaunchedSocksProxy
|
|
||||||
},
|
|
||||||
id,
|
|
||||||
() => semaphore.release()
|
|
||||||
);
|
|
||||||
},
|
|
||||||
onClose: async () => {
|
|
||||||
import_debugLogger.debugLogger.log("server", "closing browsers");
|
|
||||||
if (this._preLaunchedPlaywright)
|
|
||||||
await Promise.all(this._preLaunchedPlaywright.allBrowsers().map((browser) => browser.close({ reason: "Playwright Server stopped" })));
|
|
||||||
import_debugLogger.debugLogger.log("server", "closed browsers");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async listen(port = 0, hostname) {
|
|
||||||
return this._wsServer.listen(port, hostname, this._options.path);
|
|
||||||
}
|
|
||||||
async close() {
|
|
||||||
await this._wsServer.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function userAgentVersionMatchesErrorMessage(userAgent) {
|
|
||||||
const match = userAgent.match(/^Playwright\/(\d+\.\d+\.\d+)/);
|
|
||||||
if (!match) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const received = match[1].split(".").slice(0, 2).join(".");
|
|
||||||
const expected = (0, import_userAgent.getPlaywrightVersion)(true);
|
|
||||||
if (received !== expected) {
|
|
||||||
return (0, import_ascii.wrapInASCIIBox)([
|
|
||||||
`Playwright version mismatch:`,
|
|
||||||
` - server version: v${expected}`,
|
|
||||||
` - client version: v${received}`,
|
|
||||||
``,
|
|
||||||
`If you are using VSCode extension, restart VSCode.`,
|
|
||||||
``,
|
|
||||||
`If you are connecting to a remote service,`,
|
|
||||||
`keep your local Playwright version in sync`,
|
|
||||||
`with the remote service version.`,
|
|
||||||
``,
|
|
||||||
`<3 Playwright Team`
|
|
||||||
].join("\n"), 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
PlaywrightServer
|
|
||||||
});
|
|
||||||
69
tvapp2/node_modules/playwright-core/lib/server/accessibility.js
generated
vendored
69
tvapp2/node_modules/playwright-core/lib/server/accessibility.js
generated
vendored
@@ -1,69 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var accessibility_exports = {};
|
|
||||||
__export(accessibility_exports, {
|
|
||||||
Accessibility: () => Accessibility
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(accessibility_exports);
|
|
||||||
class Accessibility {
|
|
||||||
constructor(getAXTree) {
|
|
||||||
this._getAXTree = getAXTree;
|
|
||||||
}
|
|
||||||
async snapshot(options = {}) {
|
|
||||||
const {
|
|
||||||
interestingOnly = true,
|
|
||||||
root = null
|
|
||||||
} = options;
|
|
||||||
const { tree, needle } = await this._getAXTree(root || void 0);
|
|
||||||
if (!interestingOnly) {
|
|
||||||
if (root)
|
|
||||||
return needle && serializeTree(needle)[0];
|
|
||||||
return serializeTree(tree)[0];
|
|
||||||
}
|
|
||||||
const interestingNodes = /* @__PURE__ */ new Set();
|
|
||||||
collectInterestingNodes(interestingNodes, tree, false);
|
|
||||||
if (root && (!needle || !interestingNodes.has(needle)))
|
|
||||||
return null;
|
|
||||||
return serializeTree(needle || tree, interestingNodes)[0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function collectInterestingNodes(collection, node, insideControl) {
|
|
||||||
if (node.isInteresting(insideControl))
|
|
||||||
collection.add(node);
|
|
||||||
if (node.isLeafNode())
|
|
||||||
return;
|
|
||||||
insideControl = insideControl || node.isControl();
|
|
||||||
for (const child of node.children())
|
|
||||||
collectInterestingNodes(collection, child, insideControl);
|
|
||||||
}
|
|
||||||
function serializeTree(node, whitelistedNodes) {
|
|
||||||
const children = [];
|
|
||||||
for (const child of node.children())
|
|
||||||
children.push(...serializeTree(child, whitelistedNodes));
|
|
||||||
if (whitelistedNodes && !whitelistedNodes.has(node))
|
|
||||||
return children;
|
|
||||||
const serializedNode = node.serialize();
|
|
||||||
if (children.length)
|
|
||||||
serializedNode.children = children;
|
|
||||||
return [serializedNode];
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
Accessibility
|
|
||||||
});
|
|
||||||
451
tvapp2/node_modules/playwright-core/lib/server/android/android.js
generated
vendored
451
tvapp2/node_modules/playwright-core/lib/server/android/android.js
generated
vendored
@@ -1,451 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __create = Object.create;
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __getProtoOf = Object.getPrototypeOf;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
||||||
// If the importer is in node compatibility mode or this is not an ESM
|
|
||||||
// file that has been converted to a CommonJS file using a Babel-
|
|
||||||
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
||||||
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
||||||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
||||||
mod
|
|
||||||
));
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
var android_exports = {};
|
|
||||||
__export(android_exports, {
|
|
||||||
Android: () => Android,
|
|
||||||
AndroidDevice: () => AndroidDevice
|
|
||||||
});
|
|
||||||
module.exports = __toCommonJS(android_exports);
|
|
||||||
var import_events = require("events");
|
|
||||||
var import_fs = __toESM(require("fs"));
|
|
||||||
var import_os = __toESM(require("os"));
|
|
||||||
var import_path = __toESM(require("path"));
|
|
||||||
var import_timeoutSettings = require("../timeoutSettings");
|
|
||||||
var import_pipeTransport = require("../utils/pipeTransport");
|
|
||||||
var import_crypto = require("../utils/crypto");
|
|
||||||
var import_debug = require("../utils/debug");
|
|
||||||
var import_env = require("../utils/env");
|
|
||||||
var import_task = require("../utils/task");
|
|
||||||
var import_debugLogger = require("../utils/debugLogger");
|
|
||||||
var import_utilsBundle = require("../../utilsBundle");
|
|
||||||
var import_utilsBundle2 = require("../../utilsBundle");
|
|
||||||
var import_browserContext = require("../browserContext");
|
|
||||||
var import_chromiumSwitches = require("../chromium/chromiumSwitches");
|
|
||||||
var import_crBrowser = require("../chromium/crBrowser");
|
|
||||||
var import_fileUtils = require("../utils/fileUtils");
|
|
||||||
var import_helper = require("../helper");
|
|
||||||
var import_instrumentation = require("../instrumentation");
|
|
||||||
var import_processLauncher = require("../utils/processLauncher");
|
|
||||||
var import_progress = require("../progress");
|
|
||||||
var import_registry = require("../registry");
|
|
||||||
const ARTIFACTS_FOLDER = import_path.default.join(import_os.default.tmpdir(), "playwright-artifacts-");
|
|
||||||
class Android extends import_instrumentation.SdkObject {
|
|
||||||
constructor(parent, backend) {
|
|
||||||
super(parent, "android");
|
|
||||||
this._devices = /* @__PURE__ */ new Map();
|
|
||||||
this._backend = backend;
|
|
||||||
this._timeoutSettings = new import_timeoutSettings.TimeoutSettings();
|
|
||||||
}
|
|
||||||
setDefaultTimeout(timeout) {
|
|
||||||
this._timeoutSettings.setDefaultTimeout(timeout);
|
|
||||||
}
|
|
||||||
async devices(options) {
|
|
||||||
const devices = (await this._backend.devices(options)).filter((d) => d.status === "device");
|
|
||||||
const newSerials = /* @__PURE__ */ new Set();
|
|
||||||
for (const d of devices) {
|
|
||||||
newSerials.add(d.serial);
|
|
||||||
if (this._devices.has(d.serial))
|
|
||||||
continue;
|
|
||||||
const device = await AndroidDevice.create(this, d, options);
|
|
||||||
this._devices.set(d.serial, device);
|
|
||||||
}
|
|
||||||
for (const d of this._devices.keys()) {
|
|
||||||
if (!newSerials.has(d))
|
|
||||||
this._devices.delete(d);
|
|
||||||
}
|
|
||||||
return [...this._devices.values()];
|
|
||||||
}
|
|
||||||
_deviceClosed(device) {
|
|
||||||
this._devices.delete(device.serial);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
class AndroidDevice extends import_instrumentation.SdkObject {
|
|
||||||
constructor(android, backend, model, options) {
|
|
||||||
super(android, "android-device");
|
|
||||||
this._lastId = 0;
|
|
||||||
this._callbacks = /* @__PURE__ */ new Map();
|
|
||||||
this._webViews = /* @__PURE__ */ new Map();
|
|
||||||
this._browserConnections = /* @__PURE__ */ new Set();
|
|
||||||
this._isClosed = false;
|
|
||||||
this._android = android;
|
|
||||||
this._backend = backend;
|
|
||||||
this.model = model;
|
|
||||||
this.serial = backend.serial;
|
|
||||||
this._options = options;
|
|
||||||
this._timeoutSettings = new import_timeoutSettings.TimeoutSettings(android._timeoutSettings);
|
|
||||||
}
|
|
||||||
static {
|
|
||||||
this.Events = {
|
|
||||||
WebViewAdded: "webViewAdded",
|
|
||||||
WebViewRemoved: "webViewRemoved",
|
|
||||||
Close: "close"
|
|
||||||
};
|
|
||||||
}
|
|
||||||
static async create(android, backend, options) {
|
|
||||||
await backend.init();
|
|
||||||
const model = await backend.runCommand("shell:getprop ro.product.model");
|
|
||||||
const device = new AndroidDevice(android, backend, model.toString().trim(), options);
|
|
||||||
await device._init();
|
|
||||||
return device;
|
|
||||||
}
|
|
||||||
async _init() {
|
|
||||||
await this._refreshWebViews();
|
|
||||||
const poll = () => {
|
|
||||||
this._pollingWebViews = setTimeout(() => this._refreshWebViews().then(poll).catch(() => {
|
|
||||||
this.close().catch(() => {
|
|
||||||
});
|
|
||||||
}), 500);
|
|
||||||
};
|
|
||||||
poll();
|
|
||||||
}
|
|
||||||
setDefaultTimeout(timeout) {
|
|
||||||
this._timeoutSettings.setDefaultTimeout(timeout);
|
|
||||||
}
|
|
||||||
async shell(command) {
|
|
||||||
const result = await this._backend.runCommand(`shell:${command}`);
|
|
||||||
await this._refreshWebViews();
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
async open(command) {
|
|
||||||
return await this._backend.open(`${command}`);
|
|
||||||
}
|
|
||||||
async screenshot() {
|
|
||||||
return await this._backend.runCommand(`shell:screencap -p`);
|
|
||||||
}
|
|
||||||
async _driver() {
|
|
||||||
if (this._isClosed)
|
|
||||||
return;
|
|
||||||
if (!this._driverPromise)
|
|
||||||
this._driverPromise = this._installDriver();
|
|
||||||
return this._driverPromise;
|
|
||||||
}
|
|
||||||
async _installDriver() {
|
|
||||||
(0, import_utilsBundle.debug)("pw:android")("Stopping the old driver");
|
|
||||||
await this.shell(`am force-stop com.microsoft.playwright.androiddriver`);
|
|
||||||
if (!this._options.omitDriverInstall) {
|
|
||||||
(0, import_utilsBundle.debug)("pw:android")("Uninstalling the old driver");
|
|
||||||
await this.shell(`cmd package uninstall com.microsoft.playwright.androiddriver`);
|
|
||||||
await this.shell(`cmd package uninstall com.microsoft.playwright.androiddriver.test`);
|
|
||||||
(0, import_utilsBundle.debug)("pw:android")("Installing the new driver");
|
|
||||||
const executable = import_registry.registry.findExecutable("android");
|
|
||||||
const packageManagerCommand = (0, import_env.getPackageManagerExecCommand)();
|
|
||||||
for (const file of ["android-driver.apk", "android-driver-target.apk"]) {
|
|
||||||
const fullName = import_path.default.join(executable.directory, file);
|
|
||||||
if (!import_fs.default.existsSync(fullName))
|
|
||||||
throw new Error(`Please install Android driver apk using '${packageManagerCommand} playwright install android'`);
|
|
||||||
await this.installApk(await import_fs.default.promises.readFile(fullName));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
(0, import_utilsBundle.debug)("pw:android")("Skipping the driver installation");
|
|
||||||
}
|
|
||||||
(0, import_utilsBundle.debug)("pw:android")("Starting the new driver");
|
|
||||||
this.shell("am instrument -w com.microsoft.playwright.androiddriver.test/androidx.test.runner.AndroidJUnitRunner").catch((e) => (0, import_utilsBundle.debug)("pw:android")(e));
|
|
||||||
const socket = await this._waitForLocalAbstract("playwright_android_driver_socket");
|
|
||||||
const transport = new import_pipeTransport.PipeTransport(socket, socket, socket, "be");
|
|
||||||
transport.onmessage = (message) => {
|
|
||||||
const response = JSON.parse(message);
|
|
||||||
const { id, result, error } = response;
|
|
||||||
const callback = this._callbacks.get(id);
|
|
||||||
if (!callback)
|
|
||||||
return;
|
|
||||||
if (error)
|
|
||||||
callback.reject(new Error(error));
|
|
||||||
else
|
|
||||||
callback.fulfill(result);
|
|
||||||
this._callbacks.delete(id);
|
|
||||||
};
|
|
||||||
return transport;
|
|
||||||
}
|
|
||||||
async _waitForLocalAbstract(socketName) {
|
|
||||||
let socket;
|
|
||||||
(0, import_utilsBundle.debug)("pw:android")(`Polling the socket localabstract:${socketName}`);
|
|
||||||
while (!socket) {
|
|
||||||
try {
|
|
||||||
socket = await this._backend.open(`localabstract:${socketName}`);
|
|
||||||
} catch (e) {
|
|
||||||
await new Promise((f) => setTimeout(f, 250));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
(0, import_utilsBundle.debug)("pw:android")(`Connected to localabstract:${socketName}`);
|
|
||||||
return socket;
|
|
||||||
}
|
|
||||||
async send(method, params = {}) {
|
|
||||||
params.timeout = this._timeoutSettings.timeout(params);
|
|
||||||
const driver = await this._driver();
|
|
||||||
if (!driver)
|
|
||||||
throw new Error("Device is closed");
|
|
||||||
const id = ++this._lastId;
|
|
||||||
const result = new Promise((fulfill, reject) => this._callbacks.set(id, { fulfill, reject }));
|
|
||||||
driver.send(JSON.stringify({ id, method, params }));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
async close() {
|
|
||||||
if (this._isClosed)
|
|
||||||
return;
|
|
||||||
this._isClosed = true;
|
|
||||||
if (this._pollingWebViews)
|
|
||||||
clearTimeout(this._pollingWebViews);
|
|
||||||
for (const connection of this._browserConnections)
|
|
||||||
await connection.close();
|
|
||||||
if (this._driverPromise) {
|
|
||||||
const driver = await this._driver();
|
|
||||||
driver?.close();
|
|
||||||
}
|
|
||||||
await this._backend.close();
|
|
||||||
this._android._deviceClosed(this);
|
|
||||||
this.emit(AndroidDevice.Events.Close);
|
|
||||||
}
|
|
||||||
async launchBrowser(pkg = "com.android.chrome", options) {
|
|
||||||
(0, import_utilsBundle.debug)("pw:android")("Force-stopping", pkg);
|
|
||||||
await this._backend.runCommand(`shell:am force-stop ${pkg}`);
|
|
||||||
const socketName = (0, import_debug.isUnderTest)() ? "webview_devtools_remote_playwright_test" : "playwright_" + (0, import_crypto.createGuid)() + "_devtools_remote";
|
|
||||||
const commandLine = this._defaultArgs(options, socketName).join(" ");
|
|
||||||
(0, import_utilsBundle.debug)("pw:android")("Starting", pkg, commandLine);
|
|
||||||
await this._backend.runCommand(`shell:echo "${Buffer.from(commandLine).toString("base64")}" | base64 -d > /data/local/tmp/chrome-command-line`);
|
|
||||||
await this._backend.runCommand(`shell:am start -a android.intent.action.VIEW -d about:blank ${pkg}`);
|
|
||||||
const browserContext = await this._connectToBrowser(socketName, options);
|
|
||||||
await this._backend.runCommand(`shell:rm /data/local/tmp/chrome-command-line`);
|
|
||||||
return browserContext;
|
|
||||||
}
|
|
||||||
_defaultArgs(options, socketName) {
|
|
||||||
const chromeArguments = [
|
|
||||||
"_",
|
|
||||||
"--disable-fre",
|
|
||||||
"--no-default-browser-check",
|
|
||||||
`--remote-debugging-socket-name=${socketName}`,
|
|
||||||
...import_chromiumSwitches.chromiumSwitches,
|
|
||||||
...this._innerDefaultArgs(options)
|
|
||||||
];
|
|
||||||
return chromeArguments;
|
|
||||||
}
|
|
||||||
_innerDefaultArgs(options) {
|
|
||||||
const { args = [], proxy } = options;
|
|
||||||
const chromeArguments = [];
|
|
||||||
if (proxy) {
|
|
||||||
chromeArguments.push(`--proxy-server=${proxy.server}`);
|
|
||||||
const proxyBypassRules = [];
|
|
||||||
if (proxy.bypass)
|
|
||||||
proxyBypassRules.push(...proxy.bypass.split(",").map((t) => t.trim()).map((t) => t.startsWith(".") ? "*" + t : t));
|
|
||||||
if (!process.env.PLAYWRIGHT_DISABLE_FORCED_CHROMIUM_PROXIED_LOOPBACK && !proxyBypassRules.includes("<-loopback>"))
|
|
||||||
proxyBypassRules.push("<-loopback>");
|
|
||||||
if (proxyBypassRules.length > 0)
|
|
||||||
chromeArguments.push(`--proxy-bypass-list=${proxyBypassRules.join(";")}`);
|
|
||||||
}
|
|
||||||
chromeArguments.push(...args);
|
|
||||||
return chromeArguments;
|
|
||||||
}
|
|
||||||
async connectToWebView(socketName) {
|
|
||||||
const webView = this._webViews.get(socketName);
|
|
||||||
if (!webView)
|
|
||||||
throw new Error("WebView has been closed");
|
|
||||||
return await this._connectToBrowser(socketName);
|
|
||||||
}
|
|
||||||
async _connectToBrowser(socketName, options = {}) {
|
|
||||||
const socket = await this._waitForLocalAbstract(socketName);
|
|
||||||
const androidBrowser = new AndroidBrowser(this, socket);
|
|
||||||
await androidBrowser._init();
|
|
||||||
this._browserConnections.add(androidBrowser);
|
|
||||||
const artifactsDir = await import_fs.default.promises.mkdtemp(ARTIFACTS_FOLDER);
|
|
||||||
const cleanupArtifactsDir = async () => {
|
|
||||||
const errors = (await (0, import_fileUtils.removeFolders)([artifactsDir])).filter(Boolean);
|
|
||||||
for (let i = 0; i < (errors || []).length; ++i)
|
|
||||||
(0, import_utilsBundle.debug)("pw:android")(`exception while removing ${artifactsDir}: ${errors[i]}`);
|
|
||||||
};
|
|
||||||
import_processLauncher.gracefullyCloseSet.add(cleanupArtifactsDir);
|
|
||||||
socket.on("close", async () => {
|
|
||||||
import_processLauncher.gracefullyCloseSet.delete(cleanupArtifactsDir);
|
|
||||||
cleanupArtifactsDir().catch((e) => (0, import_utilsBundle.debug)("pw:android")(`could not cleanup artifacts dir: ${e}`));
|
|
||||||
});
|
|
||||||
const browserOptions = {
|
|
||||||
name: "clank",
|
|
||||||
isChromium: true,
|
|
||||||
slowMo: 0,
|
|
||||||
persistent: { ...options, noDefaultViewport: true },
|
|
||||||
artifactsDir,
|
|
||||||
downloadsPath: artifactsDir,
|
|
||||||
tracesDir: artifactsDir,
|
|
||||||
browserProcess: new ClankBrowserProcess(androidBrowser),
|
|
||||||
proxy: options.proxy,
|
|
||||||
protocolLogger: import_helper.helper.debugProtocolLogger(),
|
|
||||||
browserLogsCollector: new import_debugLogger.RecentLogsCollector(),
|
|
||||||
originalLaunchOptions: {}
|
|
||||||
};
|
|
||||||
(0, import_browserContext.validateBrowserContextOptions)(options, browserOptions);
|
|
||||||
const browser = await import_crBrowser.CRBrowser.connect(this.attribution.playwright, androidBrowser, browserOptions);
|
|
||||||
const controller = new import_progress.ProgressController((0, import_instrumentation.serverSideCallMetadata)(), this);
|
|
||||||
const defaultContext = browser._defaultContext;
|
|
||||||
await controller.run(async (progress) => {
|
|
||||||
await defaultContext._loadDefaultContextAsIs(progress);
|
|
||||||
});
|
|
||||||
return defaultContext;
|
|
||||||
}
|
|
||||||
webViews() {
|
|
||||||
return [...this._webViews.values()];
|
|
||||||
}
|
|
||||||
async installApk(content, options) {
|
|
||||||
const args = options && options.args ? options.args : ["-r", "-t", "-S"];
|
|
||||||
(0, import_utilsBundle.debug)("pw:android")("Opening install socket");
|
|
||||||
const installSocket = await this._backend.open(`shell:cmd package install ${args.join(" ")} ${content.length}`);
|
|
||||||
(0, import_utilsBundle.debug)("pw:android")("Writing driver bytes: " + content.length);
|
|
||||||
await installSocket.write(content);
|
|
||||||
const success = await new Promise((f) => installSocket.on("data", f));
|
|
||||||
(0, import_utilsBundle.debug)("pw:android")("Written driver bytes: " + success);
|
|
||||||
installSocket.close();
|
|
||||||
}
|
|
||||||
async push(content, path2, mode = 420) {
|
|
||||||
const socket = await this._backend.open(`sync:`);
|
|
||||||
const sendHeader = async (command, length) => {
|
|
||||||
const buffer = Buffer.alloc(command.length + 4);
|
|
||||||
buffer.write(command, 0);
|
|
||||||
buffer.writeUInt32LE(length, command.length);
|
|
||||||
await socket.write(buffer);
|
|
||||||
};
|
|
||||||
const send = async (command, data) => {
|
|
||||||
await sendHeader(command, data.length);
|
|
||||||
await socket.write(data);
|
|
||||||
};
|
|
||||||
await send("SEND", Buffer.from(`${path2},${mode}`));
|
|
||||||
const maxChunk = 65535;
|
|
||||||
for (let i = 0; i < content.length; i += maxChunk)
|
|
||||||
await send("DATA", content.slice(i, i + maxChunk));
|
|
||||||
await sendHeader("DONE", Date.now() / 1e3 | 0);
|
|
||||||
const result = await new Promise((f) => socket.once("data", f));
|
|
||||||
const code = result.slice(0, 4).toString();
|
|
||||||
if (code !== "OKAY")
|
|
||||||
throw new Error("Could not push: " + code);
|
|
||||||
socket.close();
|
|
||||||
}
|
|
||||||
async _refreshWebViews() {
|
|
||||||
const sockets = (await this._backend.runCommand(`shell:cat /proc/net/unix | grep webview_devtools_remote`)).toString().split("\n");
|
|
||||||
if (this._isClosed)
|
|
||||||
return;
|
|
||||||
const socketNames = /* @__PURE__ */ new Set();
|
|
||||||
for (const line of sockets) {
|
|
||||||
const matchSocketName = line.match(/[^@]+@(.*?webview_devtools_remote_?.*)/);
|
|
||||||
if (!matchSocketName)
|
|
||||||
continue;
|
|
||||||
const socketName = matchSocketName[1];
|
|
||||||
socketNames.add(socketName);
|
|
||||||
if (this._webViews.has(socketName))
|
|
||||||
continue;
|
|
||||||
const match = line.match(/[^@]+@.*?webview_devtools_remote_?(\d*)/);
|
|
||||||
let pid = -1;
|
|
||||||
if (match && match[1])
|
|
||||||
pid = +match[1];
|
|
||||||
const pkg = await this._extractPkg(pid);
|
|
||||||
if (this._isClosed)
|
|
||||||
return;
|
|
||||||
const webView = { pid, pkg, socketName };
|
|
||||||
this._webViews.set(socketName, webView);
|
|
||||||
this.emit(AndroidDevice.Events.WebViewAdded, webView);
|
|
||||||
}
|
|
||||||
for (const p of this._webViews.keys()) {
|
|
||||||
if (!socketNames.has(p)) {
|
|
||||||
this._webViews.delete(p);
|
|
||||||
this.emit(AndroidDevice.Events.WebViewRemoved, p);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
async _extractPkg(pid) {
|
|
||||||
let pkg = "";
|
|
||||||
if (pid === -1)
|
|
||||||
return pkg;
|
|
||||||
const procs = (await this._backend.runCommand(`shell:ps -A | grep ${pid}`)).toString().split("\n");
|
|
||||||
for (const proc of procs) {
|
|
||||||
const match = proc.match(/[^\s]+\s+(\d+).*$/);
|
|
||||||
if (!match)
|
|
||||||
continue;
|
|
||||||
pkg = proc.substring(proc.lastIndexOf(" ") + 1);
|
|
||||||
}
|
|
||||||
return pkg;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
class AndroidBrowser extends import_events.EventEmitter {
|
|
||||||
constructor(device, socket) {
|
|
||||||
super();
|
|
||||||
this._waitForNextTask = (0, import_task.makeWaitForNextTask)();
|
|
||||||
this.setMaxListeners(0);
|
|
||||||
this.device = device;
|
|
||||||
this._socket = socket;
|
|
||||||
this._socket.on("close", () => {
|
|
||||||
this._waitForNextTask(() => {
|
|
||||||
if (this.onclose)
|
|
||||||
this.onclose();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
this._receiver = new import_utilsBundle2.wsReceiver();
|
|
||||||
this._receiver.on("message", (message) => {
|
|
||||||
this._waitForNextTask(() => {
|
|
||||||
if (this.onmessage)
|
|
||||||
this.onmessage(JSON.parse(message));
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
async _init() {
|
|
||||||
await this._socket.write(Buffer.from(`GET /devtools/browser HTTP/1.1\r
|
|
||||||
Upgrade: WebSocket\r
|
|
||||||
Connection: Upgrade\r
|
|
||||||
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r
|
|
||||||
Sec-WebSocket-Version: 13\r
|
|
||||||
\r
|
|
||||||
`));
|
|
||||||
await new Promise((f) => this._socket.once("data", f));
|
|
||||||
this._socket.on("data", (data) => this._receiver._write(data, "binary", () => {
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
async send(s) {
|
|
||||||
await this._socket.write(encodeWebFrame(JSON.stringify(s)));
|
|
||||||
}
|
|
||||||
async close() {
|
|
||||||
this._socket.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function encodeWebFrame(data) {
|
|
||||||
return import_utilsBundle2.wsSender.frame(Buffer.from(data), {
|
|
||||||
opcode: 1,
|
|
||||||
mask: true,
|
|
||||||
fin: true,
|
|
||||||
readOnly: true
|
|
||||||
})[0];
|
|
||||||
}
|
|
||||||
class ClankBrowserProcess {
|
|
||||||
constructor(browser) {
|
|
||||||
this._browser = browser;
|
|
||||||
}
|
|
||||||
async kill() {
|
|
||||||
}
|
|
||||||
async close() {
|
|
||||||
await this._browser.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Annotate the CommonJS export names for ESM import in node:
|
|
||||||
0 && (module.exports = {
|
|
||||||
Android,
|
|
||||||
AndroidDevice
|
|
||||||
});
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user