@rpascene/web 0.30.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -0
- package/bin/midscene-playground +3 -0
- package/dist/es/bin.mjs +26 -0
- package/dist/es/bin.mjs.map +1 -0
- package/dist/es/bridge-mode/agent-cli-side.mjs +117 -0
- package/dist/es/bridge-mode/agent-cli-side.mjs.map +1 -0
- package/dist/es/bridge-mode/browser.mjs +2 -0
- package/dist/es/bridge-mode/common.mjs +37 -0
- package/dist/es/bridge-mode/common.mjs.map +1 -0
- package/dist/es/bridge-mode/index.mjs +4 -0
- package/dist/es/bridge-mode/io-client.mjs +101 -0
- package/dist/es/bridge-mode/io-client.mjs.map +1 -0
- package/dist/es/bridge-mode/io-server.mjs +208 -0
- package/dist/es/bridge-mode/io-server.mjs.map +1 -0
- package/dist/es/bridge-mode/page-browser-side.mjs +103 -0
- package/dist/es/bridge-mode/page-browser-side.mjs.map +1 -0
- package/dist/es/chrome-extension/agent.mjs +9 -0
- package/dist/es/chrome-extension/agent.mjs.map +1 -0
- package/dist/es/chrome-extension/cdpInput.mjs +174 -0
- package/dist/es/chrome-extension/cdpInput.mjs.LICENSE.txt +5 -0
- package/dist/es/chrome-extension/cdpInput.mjs.map +1 -0
- package/dist/es/chrome-extension/dynamic-scripts.mjs +37 -0
- package/dist/es/chrome-extension/dynamic-scripts.mjs.map +1 -0
- package/dist/es/chrome-extension/index.mjs +5 -0
- package/dist/es/chrome-extension/page.mjs +633 -0
- package/dist/es/chrome-extension/page.mjs.map +1 -0
- package/dist/es/index.mjs +6 -0
- package/dist/es/playwright/ai-fixture.mjs +325 -0
- package/dist/es/playwright/ai-fixture.mjs.map +1 -0
- package/dist/es/playwright/index.mjs +23 -0
- package/dist/es/playwright/index.mjs.map +1 -0
- package/dist/es/playwright/page.mjs +9 -0
- package/dist/es/playwright/page.mjs.map +1 -0
- package/dist/es/playwright/reporter/index.mjs +90 -0
- package/dist/es/playwright/reporter/index.mjs.map +1 -0
- package/dist/es/puppeteer/agent-launcher.mjs +132 -0
- package/dist/es/puppeteer/agent-launcher.mjs.map +1 -0
- package/dist/es/puppeteer/base-page.mjs +491 -0
- package/dist/es/puppeteer/base-page.mjs.map +1 -0
- package/dist/es/puppeteer/index.mjs +17 -0
- package/dist/es/puppeteer/index.mjs.map +1 -0
- package/dist/es/puppeteer/page.mjs +9 -0
- package/dist/es/puppeteer/page.mjs.map +1 -0
- package/dist/es/static/index.mjs +3 -0
- package/dist/es/static/static-agent.mjs +10 -0
- package/dist/es/static/static-agent.mjs.map +1 -0
- package/dist/es/static/static-page.mjs +132 -0
- package/dist/es/static/static-page.mjs.map +1 -0
- package/dist/es/web-element.mjs +96 -0
- package/dist/es/web-element.mjs.map +1 -0
- package/dist/es/web-page.mjs +206 -0
- package/dist/es/web-page.mjs.map +1 -0
- package/dist/lib/bin.js +54 -0
- package/dist/lib/bin.js.map +1 -0
- package/dist/lib/bridge-mode/agent-cli-side.js +154 -0
- package/dist/lib/bridge-mode/agent-cli-side.js.map +1 -0
- package/dist/lib/bridge-mode/browser.js +38 -0
- package/dist/lib/bridge-mode/browser.js.map +1 -0
- package/dist/lib/bridge-mode/common.js +95 -0
- package/dist/lib/bridge-mode/common.js.map +1 -0
- package/dist/lib/bridge-mode/index.js +46 -0
- package/dist/lib/bridge-mode/index.js.map +1 -0
- package/dist/lib/bridge-mode/io-client.js +135 -0
- package/dist/lib/bridge-mode/io-client.js.map +1 -0
- package/dist/lib/bridge-mode/io-server.js +245 -0
- package/dist/lib/bridge-mode/io-server.js.map +1 -0
- package/dist/lib/bridge-mode/page-browser-side.js +147 -0
- package/dist/lib/bridge-mode/page-browser-side.js.map +1 -0
- package/dist/lib/chrome-extension/agent.js +43 -0
- package/dist/lib/chrome-extension/agent.js.map +1 -0
- package/dist/lib/chrome-extension/cdpInput.js +208 -0
- package/dist/lib/chrome-extension/cdpInput.js.LICENSE.txt +5 -0
- package/dist/lib/chrome-extension/cdpInput.js.map +1 -0
- package/dist/lib/chrome-extension/dynamic-scripts.js +77 -0
- package/dist/lib/chrome-extension/dynamic-scripts.js.map +1 -0
- package/dist/lib/chrome-extension/index.js +60 -0
- package/dist/lib/chrome-extension/index.js.map +1 -0
- package/dist/lib/chrome-extension/page.js +667 -0
- package/dist/lib/chrome-extension/page.js.map +1 -0
- package/dist/lib/index.js +60 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/playwright/ai-fixture.js +362 -0
- package/dist/lib/playwright/ai-fixture.js.map +1 -0
- package/dist/lib/playwright/index.js +66 -0
- package/dist/lib/playwright/index.js.map +1 -0
- package/dist/lib/playwright/page.js +43 -0
- package/dist/lib/playwright/page.js.map +1 -0
- package/dist/lib/playwright/reporter/index.js +124 -0
- package/dist/lib/playwright/reporter/index.js.map +1 -0
- package/dist/lib/puppeteer/agent-launcher.js +194 -0
- package/dist/lib/puppeteer/agent-launcher.js.map +1 -0
- package/dist/lib/puppeteer/base-page.js +531 -0
- package/dist/lib/puppeteer/base-page.js.map +1 -0
- package/dist/lib/puppeteer/index.js +57 -0
- package/dist/lib/puppeteer/index.js.map +1 -0
- package/dist/lib/puppeteer/page.js +43 -0
- package/dist/lib/puppeteer/page.js.map +1 -0
- package/dist/lib/static/index.js +52 -0
- package/dist/lib/static/index.js.map +1 -0
- package/dist/lib/static/static-agent.js +44 -0
- package/dist/lib/static/static-agent.js.map +1 -0
- package/dist/lib/static/static-page.js +166 -0
- package/dist/lib/static/static-page.js.map +1 -0
- package/dist/lib/web-element.js +136 -0
- package/dist/lib/web-element.js.map +1 -0
- package/dist/lib/web-page.js +256 -0
- package/dist/lib/web-page.js.map +1 -0
- package/dist/types/bin.d.ts +1 -0
- package/dist/types/bridge-mode/agent-cli-side.d.ts +32 -0
- package/dist/types/bridge-mode/browser.d.ts +2 -0
- package/dist/types/bridge-mode/common.d.ts +60 -0
- package/dist/types/bridge-mode/index.d.ts +4 -0
- package/dist/types/bridge-mode/io-client.d.ts +10 -0
- package/dist/types/bridge-mode/io-server.d.ts +26 -0
- package/dist/types/bridge-mode/page-browser-side.d.ts +18 -0
- package/dist/types/chrome-extension/agent.d.ts +5 -0
- package/dist/types/chrome-extension/cdpInput.d.ts +52 -0
- package/dist/types/chrome-extension/dynamic-scripts.d.ts +3 -0
- package/dist/types/chrome-extension/index.d.ts +5 -0
- package/dist/types/chrome-extension/page.d.ts +95 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/playwright/ai-fixture.d.ts +117 -0
- package/dist/types/playwright/index.d.ts +12 -0
- package/dist/types/playwright/page.d.ts +6 -0
- package/dist/types/playwright/reporter/index.d.ts +18 -0
- package/dist/types/puppeteer/agent-launcher.d.ts +29 -0
- package/dist/types/puppeteer/base-page.d.ts +90 -0
- package/dist/types/puppeteer/index.d.ts +9 -0
- package/dist/types/puppeteer/page.d.ts +6 -0
- package/dist/types/static/index.d.ts +2 -0
- package/dist/types/static/static-agent.d.ts +5 -0
- package/dist/types/static/static-page.d.ts +52 -0
- package/dist/types/web-element.d.ts +51 -0
- package/dist/types/web-page.d.ts +59 -0
- package/package.json +164 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
PlaywrightAgent: ()=>PlaywrightAgent,
|
|
28
|
+
overrideAIConfig: ()=>env_namespaceObject.overrideAIConfig,
|
|
29
|
+
PlaywrightWebPage: ()=>external_page_js_namespaceObject.WebPage,
|
|
30
|
+
PlaywrightAiFixture: ()=>external_ai_fixture_js_namespaceObject.PlaywrightAiFixture
|
|
31
|
+
});
|
|
32
|
+
const agent_namespaceObject = require("@rpascene/core/agent");
|
|
33
|
+
const external_page_js_namespaceObject = require("./page.js");
|
|
34
|
+
const external_ai_fixture_js_namespaceObject = require("./ai-fixture.js");
|
|
35
|
+
const env_namespaceObject = require("@rpascene/shared/env");
|
|
36
|
+
const logger_namespaceObject = require("@rpascene/shared/logger");
|
|
37
|
+
const base_page_js_namespaceObject = require("../puppeteer/base-page.js");
|
|
38
|
+
const debug = (0, logger_namespaceObject.getDebug)('playwright:agent');
|
|
39
|
+
class PlaywrightAgent extends agent_namespaceObject.Agent {
|
|
40
|
+
async waitForNetworkIdle(timeout = 1000) {
|
|
41
|
+
await this.page.underlyingPage.waitForLoadState('networkidle', {
|
|
42
|
+
timeout
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
constructor(page, opts){
|
|
46
|
+
const webPage = new external_page_js_namespaceObject.WebPage(page, opts);
|
|
47
|
+
super(webPage, opts);
|
|
48
|
+
const { forceSameTabNavigation = true } = opts ?? {};
|
|
49
|
+
if (forceSameTabNavigation) (0, base_page_js_namespaceObject.forceClosePopup)(page, debug);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.PlaywrightAgent = __webpack_exports__.PlaywrightAgent;
|
|
53
|
+
exports.PlaywrightAiFixture = __webpack_exports__.PlaywrightAiFixture;
|
|
54
|
+
exports.PlaywrightWebPage = __webpack_exports__.PlaywrightWebPage;
|
|
55
|
+
exports.overrideAIConfig = __webpack_exports__.overrideAIConfig;
|
|
56
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
57
|
+
"PlaywrightAgent",
|
|
58
|
+
"PlaywrightAiFixture",
|
|
59
|
+
"PlaywrightWebPage",
|
|
60
|
+
"overrideAIConfig"
|
|
61
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
62
|
+
Object.defineProperty(exports, '__esModule', {
|
|
63
|
+
value: true
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playwright\\index.js","sources":["webpack://@rpascene/web/webpack/runtime/define_property_getters","webpack://@rpascene/web/webpack/runtime/has_own_property","webpack://@rpascene/web/webpack/runtime/make_namespace_object","webpack://@rpascene/web/./src/playwright/index.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { Agent as PageAgent } from '@rpascene/core/agent';\nimport type { Page as PlaywrightPage } from 'playwright';\nimport { WebPage as PlaywrightWebPage } from './page';\n\nexport type { PlayWrightAiFixtureType } from './ai-fixture';\nexport { PlaywrightAiFixture } from './ai-fixture';\nexport { overrideAIConfig } from '@rpascene/shared/env';\nexport { WebPage as PlaywrightWebPage } from './page';\nimport type { WebPageAgentOpt } from '@/web-element';\nimport { getDebug } from '@rpascene/shared/logger';\nimport { forceClosePopup } from '../puppeteer/base-page';\n\nconst debug = getDebug('playwright:agent');\n\nexport class PlaywrightAgent extends PageAgent<PlaywrightWebPage> {\n constructor(page: PlaywrightPage, opts?: WebPageAgentOpt) {\n const webPage = new PlaywrightWebPage(page, opts);\n super(webPage, opts);\n\n const { forceSameTabNavigation = true } = opts ?? {};\n\n if (forceSameTabNavigation) {\n forceClosePopup(page, debug);\n }\n }\n\n async waitForNetworkIdle(timeout = 1000) {\n await this.page.underlyingPage.waitForLoadState('networkidle', { timeout });\n }\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","debug","getDebug","PlaywrightAgent","PageAgent","timeout","page","opts","webPage","PlaywrightWebPage","forceSameTabNavigation","forceClosePopup"],"mappings":";;;IAAAA,oBAAoB,CAAC,GAAG,CAAC,UAASC;QACjC,IAAI,IAAIC,OAAOD,WACR,IAAGD,oBAAoB,CAAC,CAACC,YAAYC,QAAQ,CAACF,oBAAoB,CAAC,CAAC,UAASE,MACzEC,OAAO,cAAc,CAAC,UAASD,KAAK;YAAE,YAAY;YAAM,KAAKD,UAAU,CAACC,IAAI;QAAC;IAGzF;;;ICNAF,oBAAoB,CAAC,GAAG,CAACI,KAAKC,OAAUF,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACC,KAAKC;;;ICClFL,oBAAoB,CAAC,GAAG,CAAC;QACxB,IAAG,AAAkB,eAAlB,OAAOM,UAA0BA,OAAO,WAAW,EACrDH,OAAO,cAAc,CAAC,UAASG,OAAO,WAAW,EAAE;YAAE,OAAO;QAAS;QAEtEH,OAAO,cAAc,CAAC,UAAS,cAAc;YAAE,OAAO;QAAK;IAC5D;;;;;;;;;;;;;;;;ACMA,MAAMI,QAAQC,AAAAA,IAAAA,uBAAAA,QAAAA,AAAAA,EAAS;AAEhB,MAAMC,wBAAwBC,sBAAAA,KAASA;IAY5C,MAAM,mBAAmBC,UAAU,IAAI,EAAE;QACvC,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,eAAe;YAAEA;QAAQ;IAC3E;IAbA,YAAYC,IAAoB,EAAEC,IAAsB,CAAE;QACxD,MAAMC,UAAU,IAAIC,iCAAAA,OAAiBA,CAACH,MAAMC;QAC5C,KAAK,CAACC,SAASD;QAEf,MAAM,EAAEG,yBAAyB,IAAI,EAAE,GAAGH,QAAQ,CAAC;QAEnD,IAAIG,wBACFC,AAAAA,IAAAA,6BAAAA,eAAAA,AAAAA,EAAgBL,MAAML;IAE1B;AAKF"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
WebPage: ()=>WebPage
|
|
28
|
+
});
|
|
29
|
+
const base_page_js_namespaceObject = require("../puppeteer/base-page.js");
|
|
30
|
+
class WebPage extends base_page_js_namespaceObject.Page {
|
|
31
|
+
constructor(page, opts){
|
|
32
|
+
super(page, 'playwright', opts);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.WebPage = __webpack_exports__.WebPage;
|
|
36
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
37
|
+
"WebPage"
|
|
38
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
39
|
+
Object.defineProperty(exports, '__esModule', {
|
|
40
|
+
value: true
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playwright\\page.js","sources":["webpack://@rpascene/web/webpack/runtime/define_property_getters","webpack://@rpascene/web/webpack/runtime/has_own_property","webpack://@rpascene/web/webpack/runtime/make_namespace_object","webpack://@rpascene/web/./src/playwright/page.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type { Page as PlaywrightPageType } from 'playwright';\nimport { Page as BasePage } from '../puppeteer/base-page';\nimport type { WebPageOpt } from '../web-element';\n\nexport class WebPage extends BasePage<'playwright', PlaywrightPageType> {\n constructor(page: PlaywrightPageType, opts?: WebPageOpt) {\n super(page, 'playwright', opts);\n }\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","WebPage","BasePage","page","opts"],"mappings":";;;IAAAA,oBAAoB,CAAC,GAAG,CAAC,UAASC;QACjC,IAAI,IAAIC,OAAOD,WACR,IAAGD,oBAAoB,CAAC,CAACC,YAAYC,QAAQ,CAACF,oBAAoB,CAAC,CAAC,UAASE,MACzEC,OAAO,cAAc,CAAC,UAASD,KAAK;YAAE,YAAY;YAAM,KAAKD,UAAU,CAACC,IAAI;QAAC;IAGzF;;;ICNAF,oBAAoB,CAAC,GAAG,CAACI,KAAKC,OAAUF,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACC,KAAKC;;;ICClFL,oBAAoB,CAAC,GAAG,CAAC;QACxB,IAAG,AAAkB,eAAlB,OAAOM,UAA0BA,OAAO,WAAW,EACrDH,OAAO,cAAc,CAAC,UAASG,OAAO,WAAW,EAAE;YAAE,OAAO;QAAS;QAEtEH,OAAO,cAAc,CAAC,UAAS,cAAc;YAAE,OAAO;QAAK;IAC5D;;;;;;;;ACFO,MAAMI,gBAAgBC,6BAAAA,IAAQA;IACnC,YAAYC,IAAwB,EAAEC,IAAiB,CAAE;QACvD,KAAK,CAACD,MAAM,cAAcC;IAC5B;AACF"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
default: ()=>reporter
|
|
28
|
+
});
|
|
29
|
+
const external_node_fs_namespaceObject = require("node:fs");
|
|
30
|
+
const agent_namespaceObject = require("@rpascene/core/agent");
|
|
31
|
+
const utils_namespaceObject = require("@rpascene/core/utils");
|
|
32
|
+
const shared_utils_namespaceObject = require("@rpascene/shared/utils");
|
|
33
|
+
function _define_property(obj, key, value) {
|
|
34
|
+
if (key in obj) Object.defineProperty(obj, key, {
|
|
35
|
+
value: value,
|
|
36
|
+
enumerable: true,
|
|
37
|
+
configurable: true,
|
|
38
|
+
writable: true
|
|
39
|
+
});
|
|
40
|
+
else obj[key] = value;
|
|
41
|
+
return obj;
|
|
42
|
+
}
|
|
43
|
+
class RpasceneReporter {
|
|
44
|
+
static getMode(reporterType) {
|
|
45
|
+
if (!reporterType) return 'merged';
|
|
46
|
+
if ('merged' !== reporterType && 'separate' !== reporterType) throw new Error(`Unknown reporter type in playwright config: ${reporterType}, only support 'merged' or 'separate'`);
|
|
47
|
+
return reporterType;
|
|
48
|
+
}
|
|
49
|
+
getSeparatedFilename(testTitle) {
|
|
50
|
+
if (!this.testTitleToFilename.has(testTitle)) {
|
|
51
|
+
const baseTag = `playwright-${(0, shared_utils_namespaceObject.replaceIllegalPathCharsAndSpace)(testTitle)}`;
|
|
52
|
+
const generatedFilename = (0, agent_namespaceObject.getReportFileName)(baseTag);
|
|
53
|
+
this.testTitleToFilename.set(testTitle, generatedFilename);
|
|
54
|
+
}
|
|
55
|
+
return this.testTitleToFilename.get(testTitle);
|
|
56
|
+
}
|
|
57
|
+
getReportFilename(testTitle) {
|
|
58
|
+
if ('merged' === this.mode) {
|
|
59
|
+
if (!this.mergedFilename) this.mergedFilename = (0, agent_namespaceObject.getReportFileName)('playwright-merged');
|
|
60
|
+
return this.mergedFilename;
|
|
61
|
+
}
|
|
62
|
+
if ('separate' === this.mode) {
|
|
63
|
+
if (!testTitle) throw new Error('testTitle is required in separate mode');
|
|
64
|
+
return this.getSeparatedFilename(testTitle);
|
|
65
|
+
}
|
|
66
|
+
throw new Error(`Unknown mode: ${this.mode}`);
|
|
67
|
+
}
|
|
68
|
+
updateReport(testData) {
|
|
69
|
+
var _testData_attributes;
|
|
70
|
+
if (!testData || !this.mode) return;
|
|
71
|
+
const fileName = this.getReportFilename(null == (_testData_attributes = testData.attributes) ? void 0 : _testData_attributes.playwright_test_title);
|
|
72
|
+
const reportPath = (0, utils_namespaceObject.writeDumpReport)(fileName, testData, 'merged' === this.mode);
|
|
73
|
+
reportPath && (0, agent_namespaceObject.printReportMsg)(reportPath);
|
|
74
|
+
}
|
|
75
|
+
async onBegin(config, suite) {}
|
|
76
|
+
onTestBegin(_test, _result) {}
|
|
77
|
+
onTestEnd(test, result) {
|
|
78
|
+
const dumpAnnotation = test.annotations.find((annotation)=>'RPASCENE_DUMP_ANNOTATION' === annotation.type);
|
|
79
|
+
if (!(null == dumpAnnotation ? void 0 : dumpAnnotation.description)) return;
|
|
80
|
+
const tempFilePath = dumpAnnotation.description;
|
|
81
|
+
let dumpString;
|
|
82
|
+
try {
|
|
83
|
+
dumpString = (0, external_node_fs_namespaceObject.readFileSync)(tempFilePath, 'utf-8');
|
|
84
|
+
} catch (error) {
|
|
85
|
+
console.error(`Failed to read Rpascene dump file: ${tempFilePath}`, error);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const retry = result.retry ? `(retry #${result.retry})` : '';
|
|
89
|
+
const testId = `${test.id}${retry}`;
|
|
90
|
+
const testData = {
|
|
91
|
+
dumpString,
|
|
92
|
+
attributes: {
|
|
93
|
+
playwright_test_id: testId,
|
|
94
|
+
playwright_test_title: `${test.title}${retry}`,
|
|
95
|
+
playwright_test_status: result.status,
|
|
96
|
+
playwright_test_duration: result.duration
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
this.updateReport(testData);
|
|
100
|
+
try {
|
|
101
|
+
(0, external_node_fs_namespaceObject.rmSync)(tempFilePath, {
|
|
102
|
+
force: true
|
|
103
|
+
});
|
|
104
|
+
} catch (error) {
|
|
105
|
+
console.warn(`Failed to delete Rpascene temp file: ${tempFilePath}`, error);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
constructor(options = {}){
|
|
109
|
+
_define_property(this, "mergedFilename", void 0);
|
|
110
|
+
_define_property(this, "testTitleToFilename", new Map());
|
|
111
|
+
_define_property(this, "mode", void 0);
|
|
112
|
+
this.mode = RpasceneReporter.getMode(options.type ?? 'merged');
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
const reporter = RpasceneReporter;
|
|
116
|
+
exports["default"] = __webpack_exports__["default"];
|
|
117
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
118
|
+
"default"
|
|
119
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
120
|
+
Object.defineProperty(exports, '__esModule', {
|
|
121
|
+
value: true
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playwright\\reporter\\index.js","sources":["webpack://@rpascene/web/webpack/runtime/define_property_getters","webpack://@rpascene/web/webpack/runtime/has_own_property","webpack://@rpascene/web/webpack/runtime/make_namespace_object","webpack://@rpascene/web/./src/playwright/reporter/index.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { readFileSync, rmSync } from 'node:fs';\nimport type { ReportDumpWithAttributes } from '@rpascene/core';\nimport { getReportFileName, printReportMsg } from '@rpascene/core/agent';\nimport { writeDumpReport } from '@rpascene/core/utils';\nimport { replaceIllegalPathCharsAndSpace } from '@rpascene/shared/utils';\nimport type {\n FullConfig,\n Reporter,\n Suite,\n TestCase,\n TestResult,\n} from '@playwright/test/reporter';\n\ninterface RpasceneReporterOptions {\n type?: 'merged' | 'separate';\n}\n\nclass RpasceneReporter implements Reporter {\n private mergedFilename?: string;\n private testTitleToFilename = new Map<string, string>();\n mode?: 'merged' | 'separate';\n\n constructor(options: RpasceneReporterOptions = {}) {\n // Set mode from constructor options (official Playwright way)\n this.mode = RpasceneReporter.getMode(options.type ?? 'merged');\n }\n\n private static getMode(reporterType: string): 'merged' | 'separate' {\n if (!reporterType) {\n return 'merged';\n }\n if (reporterType !== 'merged' && reporterType !== 'separate') {\n throw new Error(\n `Unknown reporter type in playwright config: ${reporterType}, only support 'merged' or 'separate'`,\n );\n }\n return reporterType;\n }\n\n private getSeparatedFilename(testTitle: string): string {\n if (!this.testTitleToFilename.has(testTitle)) {\n const baseTag = `playwright-${replaceIllegalPathCharsAndSpace(testTitle)}`;\n const generatedFilename = getReportFileName(baseTag);\n this.testTitleToFilename.set(testTitle, generatedFilename);\n }\n return this.testTitleToFilename.get(testTitle)!;\n }\n\n private getReportFilename(testTitle?: string): string {\n if (this.mode === 'merged') {\n if (!this.mergedFilename) {\n this.mergedFilename = getReportFileName('playwright-merged');\n }\n return this.mergedFilename;\n } else if (this.mode === 'separate') {\n if (!testTitle) throw new Error('testTitle is required in separate mode');\n return this.getSeparatedFilename(testTitle);\n }\n throw new Error(`Unknown mode: ${this.mode}`);\n }\n\n private updateReport(testData: ReportDumpWithAttributes) {\n if (!testData || !this.mode) return;\n const fileName = this.getReportFilename(\n testData.attributes?.playwright_test_title,\n );\n const reportPath = writeDumpReport(\n fileName,\n testData,\n this.mode === 'merged',\n );\n reportPath && printReportMsg(reportPath);\n }\n\n async onBegin(config: FullConfig, suite: Suite) { }\n\n onTestBegin(_test: TestCase, _result: TestResult) {\n // logger(`Starting test ${test.title}`);\n }\n\n onTestEnd(test: TestCase, result: TestResult) {\n const dumpAnnotation = test.annotations.find((annotation) => {\n return annotation.type === 'RPASCENE_DUMP_ANNOTATION';\n });\n if (!dumpAnnotation?.description) return;\n\n const tempFilePath = dumpAnnotation.description;\n let dumpString: string;\n\n try {\n dumpString = readFileSync(tempFilePath, 'utf-8');\n } catch (error) {\n console.error(\n `Failed to read Rpascene dump file: ${tempFilePath}`,\n error,\n );\n return;\n }\n\n const retry = result.retry ? `(retry #${result.retry})` : '';\n const testId = `${test.id}${retry}`;\n const testData: ReportDumpWithAttributes = {\n dumpString,\n attributes: {\n playwright_test_id: testId,\n playwright_test_title: `${test.title}${retry}`,\n playwright_test_status: result.status,\n playwright_test_duration: result.duration,\n },\n };\n\n this.updateReport(testData);\n\n // Clean up: delete temp file\n try {\n rmSync(tempFilePath, { force: true });\n } catch (error) {\n console.warn(\n `Failed to delete Rpascene temp file: ${tempFilePath}`,\n error,\n );\n }\n }\n}\n\nexport default RpasceneReporter;\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","RpasceneReporter","reporterType","Error","testTitle","baseTag","replaceIllegalPathCharsAndSpace","generatedFilename","getReportFileName","testData","_testData_attributes","fileName","reportPath","writeDumpReport","printReportMsg","config","suite","_test","_result","test","result","dumpAnnotation","annotation","tempFilePath","dumpString","readFileSync","error","console","retry","testId","rmSync","options","Map"],"mappings":"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"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.n = (module)=>{
|
|
5
|
+
var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
|
|
6
|
+
__webpack_require__.d(getter, {
|
|
7
|
+
a: getter
|
|
8
|
+
});
|
|
9
|
+
return getter;
|
|
10
|
+
};
|
|
11
|
+
})();
|
|
12
|
+
(()=>{
|
|
13
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
14
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: definition[key]
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
})();
|
|
20
|
+
(()=>{
|
|
21
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
22
|
+
})();
|
|
23
|
+
(()=>{
|
|
24
|
+
__webpack_require__.r = (exports1)=>{
|
|
25
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
26
|
+
value: 'Module'
|
|
27
|
+
});
|
|
28
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
29
|
+
value: true
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
})();
|
|
33
|
+
var __webpack_exports__ = {};
|
|
34
|
+
__webpack_require__.r(__webpack_exports__);
|
|
35
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
36
|
+
defaultViewportHeight: ()=>defaultViewportHeight,
|
|
37
|
+
defaultViewportScale: ()=>defaultViewportScale,
|
|
38
|
+
launchPuppeteerPage: ()=>launchPuppeteerPage,
|
|
39
|
+
puppeteerAgentForTarget: ()=>puppeteerAgentForTarget,
|
|
40
|
+
defaultWaitForNetworkIdleTimeout: ()=>defaultWaitForNetworkIdleTimeout,
|
|
41
|
+
defaultUA: ()=>defaultUA,
|
|
42
|
+
defaultViewportWidth: ()=>defaultViewportWidth
|
|
43
|
+
});
|
|
44
|
+
const external_node_fs_namespaceObject = require("node:fs");
|
|
45
|
+
const logger_namespaceObject = require("@rpascene/shared/logger");
|
|
46
|
+
const utils_namespaceObject = require("@rpascene/shared/utils");
|
|
47
|
+
const external_index_js_namespaceObject = require("./index.js");
|
|
48
|
+
const constants_namespaceObject = require("@rpascene/shared/constants");
|
|
49
|
+
const external_puppeteer_namespaceObject = require("puppeteer");
|
|
50
|
+
var external_puppeteer_default = /*#__PURE__*/ __webpack_require__.n(external_puppeteer_namespaceObject);
|
|
51
|
+
const defaultUA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36';
|
|
52
|
+
const defaultViewportWidth = 1440;
|
|
53
|
+
const defaultViewportHeight = 768;
|
|
54
|
+
const defaultViewportScale = 'darwin' === process.platform ? 2 : 1;
|
|
55
|
+
const defaultWaitForNetworkIdleTimeout = constants_namespaceObject.DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT;
|
|
56
|
+
const launcherDebug = (0, logger_namespaceObject.getDebug)('puppeteer:launcher');
|
|
57
|
+
async function launchPuppeteerPage(target, preference, browser) {
|
|
58
|
+
var _target_waitForNetworkIdle;
|
|
59
|
+
(0, utils_namespaceObject.assert)(target.url, 'url is required');
|
|
60
|
+
const freeFn = [];
|
|
61
|
+
const ua = target.userAgent || defaultUA;
|
|
62
|
+
let width = defaultViewportWidth;
|
|
63
|
+
let preferMaximizedWindow = true;
|
|
64
|
+
if (target.viewportWidth) {
|
|
65
|
+
preferMaximizedWindow = false;
|
|
66
|
+
(0, utils_namespaceObject.assert)('number' == typeof target.viewportWidth, 'viewportWidth must be a number');
|
|
67
|
+
width = Number.parseInt(target.viewportWidth, 10);
|
|
68
|
+
(0, utils_namespaceObject.assert)(width > 0, `viewportWidth must be greater than 0, but got ${width}`);
|
|
69
|
+
}
|
|
70
|
+
let height = defaultViewportHeight;
|
|
71
|
+
if (target.viewportHeight) {
|
|
72
|
+
preferMaximizedWindow = false;
|
|
73
|
+
(0, utils_namespaceObject.assert)('number' == typeof target.viewportHeight, 'viewportHeight must be a number');
|
|
74
|
+
height = Number.parseInt(target.viewportHeight, 10);
|
|
75
|
+
(0, utils_namespaceObject.assert)(height > 0, `viewportHeight must be greater than 0, but got ${height}`);
|
|
76
|
+
}
|
|
77
|
+
let dpr = defaultViewportScale;
|
|
78
|
+
if (target.viewportScale) {
|
|
79
|
+
preferMaximizedWindow = false;
|
|
80
|
+
(0, utils_namespaceObject.assert)('number' == typeof target.viewportScale, 'viewportScale must be a number');
|
|
81
|
+
dpr = Number.parseInt(target.viewportScale, 10);
|
|
82
|
+
(0, utils_namespaceObject.assert)(dpr > 0, `viewportScale must be greater than 0, but got ${dpr}`);
|
|
83
|
+
}
|
|
84
|
+
const viewportConfig = {
|
|
85
|
+
width,
|
|
86
|
+
height,
|
|
87
|
+
deviceScaleFactor: dpr
|
|
88
|
+
};
|
|
89
|
+
const headed = (null == preference ? void 0 : preference.headed) || (null == preference ? void 0 : preference.keepWindow);
|
|
90
|
+
preferMaximizedWindow = preferMaximizedWindow && !!headed;
|
|
91
|
+
if (headed && '1' === process.env.CI) console.warn('you are probably running headed mode in CI, this will usually fail.');
|
|
92
|
+
const isWindows = 'win32' === process.platform;
|
|
93
|
+
const args = [
|
|
94
|
+
...isWindows ? [] : [
|
|
95
|
+
'--no-sandbox',
|
|
96
|
+
'--disable-setuid-sandbox'
|
|
97
|
+
],
|
|
98
|
+
'--disable-features=HttpsFirstBalancedModeAutoEnable',
|
|
99
|
+
'--disable-features=PasswordLeakDetection',
|
|
100
|
+
'--disable-save-password-bubble',
|
|
101
|
+
`--user-agent="${ua}"`,
|
|
102
|
+
preferMaximizedWindow ? '--start-maximized' : `--window-size=${width},${height + 200}`
|
|
103
|
+
];
|
|
104
|
+
launcherDebug('launching browser with viewport, headed', headed, 'viewport', viewportConfig, 'args', args, 'preference', preference);
|
|
105
|
+
let browserInstance = browser;
|
|
106
|
+
if (!browserInstance) {
|
|
107
|
+
browserInstance = await external_puppeteer_default().launch({
|
|
108
|
+
headless: !(null == preference ? void 0 : preference.headed),
|
|
109
|
+
defaultViewport: viewportConfig,
|
|
110
|
+
args,
|
|
111
|
+
acceptInsecureCerts: target.acceptInsecureCerts
|
|
112
|
+
});
|
|
113
|
+
freeFn.push({
|
|
114
|
+
name: 'puppeteer_browser',
|
|
115
|
+
fn: ()=>{
|
|
116
|
+
if (!(null == preference ? void 0 : preference.keepWindow)) if (isWindows) setTimeout(()=>{
|
|
117
|
+
null == browserInstance || browserInstance.close();
|
|
118
|
+
}, 800);
|
|
119
|
+
else null == browserInstance || browserInstance.close();
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
const page = await browserInstance.newPage();
|
|
124
|
+
if (target.cookie) {
|
|
125
|
+
const cookieFileContent = (0, external_node_fs_namespaceObject.readFileSync)(target.cookie, 'utf-8');
|
|
126
|
+
await browserInstance.setCookie(...JSON.parse(cookieFileContent));
|
|
127
|
+
}
|
|
128
|
+
if (ua) await page.setUserAgent(ua);
|
|
129
|
+
if (viewportConfig) await page.setViewport(viewportConfig);
|
|
130
|
+
const waitForNetworkIdleTimeout = 'number' == typeof (null == (_target_waitForNetworkIdle = target.waitForNetworkIdle) ? void 0 : _target_waitForNetworkIdle.timeout) ? target.waitForNetworkIdle.timeout : defaultWaitForNetworkIdleTimeout;
|
|
131
|
+
try {
|
|
132
|
+
launcherDebug('goto', target.url);
|
|
133
|
+
await page.goto(target.url);
|
|
134
|
+
if (waitForNetworkIdleTimeout > 0) {
|
|
135
|
+
launcherDebug('waitForNetworkIdle', waitForNetworkIdleTimeout);
|
|
136
|
+
await page.waitForNetworkIdle({
|
|
137
|
+
timeout: waitForNetworkIdleTimeout
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
} catch (e) {
|
|
141
|
+
var _target_waitForNetworkIdle1, _target_waitForNetworkIdle2;
|
|
142
|
+
if ('boolean' == typeof (null == (_target_waitForNetworkIdle1 = target.waitForNetworkIdle) ? void 0 : _target_waitForNetworkIdle1.continueOnNetworkIdleError) && !(null == (_target_waitForNetworkIdle2 = target.waitForNetworkIdle) ? void 0 : _target_waitForNetworkIdle2.continueOnNetworkIdleError)) {
|
|
143
|
+
const newError = new Error(`failed to wait for network idle: ${e}`, {
|
|
144
|
+
cause: e
|
|
145
|
+
});
|
|
146
|
+
throw newError;
|
|
147
|
+
}
|
|
148
|
+
const newMessage = `failed to wait for network idle after ${waitForNetworkIdleTimeout}ms, but the script will continue.`;
|
|
149
|
+
console.warn(newMessage);
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
page,
|
|
153
|
+
freeFn
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
async function puppeteerAgentForTarget(target, preference, browser) {
|
|
157
|
+
const { page, freeFn } = await launchPuppeteerPage(target, preference, browser);
|
|
158
|
+
const agent = new external_index_js_namespaceObject.PuppeteerAgent(page, {
|
|
159
|
+
autoPrintReportMsg: false,
|
|
160
|
+
testId: null == preference ? void 0 : preference.testId,
|
|
161
|
+
cache: null == preference ? void 0 : preference.cache,
|
|
162
|
+
aiActionContext: target.aiActionContext,
|
|
163
|
+
forceSameTabNavigation: void 0 !== target.forceSameTabNavigation ? target.forceSameTabNavigation : true
|
|
164
|
+
});
|
|
165
|
+
freeFn.push({
|
|
166
|
+
name: 'rpascene_puppeteer_agent',
|
|
167
|
+
fn: ()=>agent.destroy()
|
|
168
|
+
});
|
|
169
|
+
return {
|
|
170
|
+
agent,
|
|
171
|
+
freeFn
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
exports.defaultUA = __webpack_exports__.defaultUA;
|
|
175
|
+
exports.defaultViewportHeight = __webpack_exports__.defaultViewportHeight;
|
|
176
|
+
exports.defaultViewportScale = __webpack_exports__.defaultViewportScale;
|
|
177
|
+
exports.defaultViewportWidth = __webpack_exports__.defaultViewportWidth;
|
|
178
|
+
exports.defaultWaitForNetworkIdleTimeout = __webpack_exports__.defaultWaitForNetworkIdleTimeout;
|
|
179
|
+
exports.launchPuppeteerPage = __webpack_exports__.launchPuppeteerPage;
|
|
180
|
+
exports.puppeteerAgentForTarget = __webpack_exports__.puppeteerAgentForTarget;
|
|
181
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
182
|
+
"defaultUA",
|
|
183
|
+
"defaultViewportHeight",
|
|
184
|
+
"defaultViewportScale",
|
|
185
|
+
"defaultViewportWidth",
|
|
186
|
+
"defaultWaitForNetworkIdleTimeout",
|
|
187
|
+
"launchPuppeteerPage",
|
|
188
|
+
"puppeteerAgentForTarget"
|
|
189
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
190
|
+
Object.defineProperty(exports, '__esModule', {
|
|
191
|
+
value: true
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
//# sourceMappingURL=agent-launcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"puppeteer\\agent-launcher.js","sources":["webpack://@rpascene/web/webpack/runtime/compat_get_default_export","webpack://@rpascene/web/webpack/runtime/define_property_getters","webpack://@rpascene/web/webpack/runtime/has_own_property","webpack://@rpascene/web/webpack/runtime/make_namespace_object","webpack://@rpascene/web/./src/puppeteer/agent-launcher.ts"],"sourcesContent":["// getDefaultExport function for compatibility with non-ESM modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};\n","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { readFileSync } from 'node:fs';\nimport { getDebug } from '@rpascene/shared/logger';\nimport { assert } from '@rpascene/shared/utils';\n\nimport { PuppeteerAgent } from '@/puppeteer/index';\nimport type { Cache, RpasceneYamlScriptWebEnv } from '@rpascene/core';\nimport { DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT } from '@rpascene/shared/constants';\nimport puppeteer, { type Browser } from 'puppeteer';\n\nexport const defaultUA =\n 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36';\nexport const defaultViewportWidth = 1440;\nexport const defaultViewportHeight = 768;\nexport const defaultViewportScale = process.platform === 'darwin' ? 2 : 1;\nexport const defaultWaitForNetworkIdleTimeout =\n DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT;\n\ninterface FreeFn {\n name: string;\n fn: () => void;\n}\n\nconst launcherDebug = getDebug('puppeteer:launcher');\n\nexport async function launchPuppeteerPage(\n target: RpasceneYamlScriptWebEnv,\n preference?: {\n headed?: boolean;\n keepWindow?: boolean;\n },\n browser?: Browser,\n) {\n assert(target.url, 'url is required');\n const freeFn: FreeFn[] = [];\n\n // prepare the environment\n const ua = target.userAgent || defaultUA;\n let width = defaultViewportWidth;\n let preferMaximizedWindow = true;\n if (target.viewportWidth) {\n preferMaximizedWindow = false;\n assert(\n typeof target.viewportWidth === 'number',\n 'viewportWidth must be a number',\n );\n width = Number.parseInt(target.viewportWidth as unknown as string, 10);\n assert(width > 0, `viewportWidth must be greater than 0, but got ${width}`);\n }\n let height = defaultViewportHeight;\n if (target.viewportHeight) {\n preferMaximizedWindow = false;\n assert(\n typeof target.viewportHeight === 'number',\n 'viewportHeight must be a number',\n );\n height = Number.parseInt(target.viewportHeight as unknown as string, 10);\n assert(\n height > 0,\n `viewportHeight must be greater than 0, but got ${height}`,\n );\n }\n let dpr = defaultViewportScale;\n if (target.viewportScale) {\n preferMaximizedWindow = false;\n assert(\n typeof target.viewportScale === 'number',\n 'viewportScale must be a number',\n );\n dpr = Number.parseInt(target.viewportScale as unknown as string, 10);\n assert(dpr > 0, `viewportScale must be greater than 0, but got ${dpr}`);\n }\n const viewportConfig = {\n width,\n height,\n deviceScaleFactor: dpr,\n };\n\n const headed = preference?.headed || preference?.keepWindow;\n\n // only maximize window in headed mode\n preferMaximizedWindow = preferMaximizedWindow && !!headed;\n\n // launch the browser\n if (headed && process.env.CI === '1') {\n console.warn(\n 'you are probably running headed mode in CI, this will usually fail.',\n );\n }\n // do not use 'no-sandbox' on windows https://www.perplexity.ai/search/how-to-solve-this-with-nodejs-dMHpdCypRa..JA8TkQzbeQ\n const isWindows = process.platform === 'win32';\n const args = [\n ...(isWindows ? [] : ['--no-sandbox', '--disable-setuid-sandbox']),\n '--disable-features=HttpsFirstBalancedModeAutoEnable',\n '--disable-features=PasswordLeakDetection',\n '--disable-save-password-bubble',\n `--user-agent=\"${ua}\"`,\n preferMaximizedWindow\n ? '--start-maximized'\n : `--window-size=${width},${height + 200}`, // add 200px for the address bar\n ];\n\n launcherDebug(\n 'launching browser with viewport, headed',\n headed,\n 'viewport',\n viewportConfig,\n 'args',\n args,\n 'preference',\n preference,\n );\n let browserInstance = browser;\n if (!browserInstance) {\n browserInstance = await puppeteer.launch({\n headless: !preference?.headed,\n defaultViewport: viewportConfig,\n args,\n acceptInsecureCerts: target.acceptInsecureCerts,\n });\n freeFn.push({\n name: 'puppeteer_browser',\n fn: () => {\n if (!preference?.keepWindow) {\n if (isWindows) {\n setTimeout(() => {\n browserInstance?.close();\n }, 800);\n } else {\n browserInstance?.close();\n }\n }\n },\n });\n }\n const page = await browserInstance.newPage();\n // await page.setUserAgent(ua);\n // await page.setViewport(viewportConfig);\n\n if (target.cookie) {\n const cookieFileContent = readFileSync(target.cookie, 'utf-8');\n await browserInstance.setCookie(...JSON.parse(cookieFileContent));\n }\n\n if (ua) {\n await page.setUserAgent(ua);\n }\n\n if (viewportConfig) {\n await page.setViewport(viewportConfig);\n }\n\n const waitForNetworkIdleTimeout =\n typeof target.waitForNetworkIdle?.timeout === 'number'\n ? target.waitForNetworkIdle.timeout\n : defaultWaitForNetworkIdleTimeout;\n\n try {\n launcherDebug('goto', target.url);\n await page.goto(target.url);\n if (waitForNetworkIdleTimeout > 0) {\n launcherDebug('waitForNetworkIdle', waitForNetworkIdleTimeout);\n await page.waitForNetworkIdle({\n timeout: waitForNetworkIdleTimeout,\n });\n }\n } catch (e) {\n if (\n typeof target.waitForNetworkIdle?.continueOnNetworkIdleError ===\n 'boolean' &&\n !target.waitForNetworkIdle?.continueOnNetworkIdleError\n ) {\n const newError = new Error(`failed to wait for network idle: ${e}`, {\n cause: e,\n });\n throw newError;\n }\n const newMessage = `failed to wait for network idle after ${waitForNetworkIdleTimeout}ms, but the script will continue.`;\n console.warn(newMessage);\n }\n\n return { page, freeFn };\n}\n\nexport async function puppeteerAgentForTarget(\n target: RpasceneYamlScriptWebEnv,\n preference?: {\n headed?: boolean;\n keepWindow?: boolean;\n testId?: string;\n cache?: Cache;\n },\n browser?: Browser,\n) {\n const { page, freeFn } = await launchPuppeteerPage(\n target,\n preference,\n browser,\n );\n\n // prepare Rpascene agent\n const agent = new PuppeteerAgent(page, {\n autoPrintReportMsg: false,\n testId: preference?.testId,\n cache: preference?.cache,\n aiActionContext: target.aiActionContext,\n forceSameTabNavigation:\n typeof target.forceSameTabNavigation !== 'undefined'\n ? target.forceSameTabNavigation\n : true, // true for default in yaml script\n });\n\n freeFn.push({\n name: 'rpascene_puppeteer_agent',\n fn: () => agent.destroy(),\n });\n\n return { agent, freeFn };\n}\n"],"names":["__webpack_require__","module","getter","definition","key","Object","obj","prop","Symbol","defaultUA","defaultViewportWidth","defaultViewportHeight","defaultViewportScale","process","defaultWaitForNetworkIdleTimeout","DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT","launcherDebug","getDebug","launchPuppeteerPage","target","preference","browser","_target_waitForNetworkIdle","assert","freeFn","ua","width","preferMaximizedWindow","Number","height","dpr","viewportConfig","headed","console","isWindows","args","browserInstance","puppeteer","setTimeout","page","cookieFileContent","readFileSync","JSON","waitForNetworkIdleTimeout","e","_target_waitForNetworkIdle1","_target_waitForNetworkIdle2","newError","Error","newMessage","puppeteerAgentForTarget","agent","PuppeteerAgent"],"mappings":"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"}
|