feat: Reinitialize frontend with SvelteKit and TypeScript

- Delete old Vite+Svelte frontend
- Initialize new SvelteKit project with TypeScript
- Configure Tailwind CSS v4 + DaisyUI
- Implement JWT authentication with auto-refresh
- Create login page with form validation (Zod)
- Add protected route guards
- Update Docker configuration for single-stage build
- Add E2E tests with Playwright (6/11 passing)
- Fix Svelte 5 reactivity with $state() runes

Known issues:
- 5 E2E tests failing (timing/async issues)
- Token refresh implementation needs debugging
- Validation error display timing
This commit is contained in:
2026-02-17 16:19:59 -05:00
parent 54df6018f5
commit de2d83092e
28274 changed files with 3816354 additions and 90 deletions

View File

@@ -0,0 +1,60 @@
import IBrowserSettings from './types/IBrowserSettings.js';
import BrowserContext from './BrowserContext.js';
import IOptionalBrowserSettings from './types/IOptionalBrowserSettings.js';
import BrowserPage from './BrowserPage.js';
import IBrowser from './types/IBrowser.js';
import BrowserExceptionObserver from './utilities/BrowserExceptionObserver.js';
import * as PropertySymbol from '../PropertySymbol.js';
/**
* Browser.
*/
export default class Browser implements IBrowser {
readonly contexts: BrowserContext[];
readonly settings: IBrowserSettings;
readonly console: Console | null;
[PropertySymbol.exceptionObserver]: BrowserExceptionObserver | null;
/**
* Constructor.
*
* @param [options] Options.
* @param [options.settings] Browser settings.
* @param [options.console] Console.
*/
constructor(options?: {
settings?: IOptionalBrowserSettings;
console?: Console;
});
/**
* Returns the default context.
*
* @returns Default context.
*/
get defaultContext(): BrowserContext;
/**
* Aborts all ongoing operations and destroys the browser.
*/
close(): Promise<void>;
/**
* Returns a promise that is resolved when all resources has been loaded, fetch has completed, and all async tasks such as timers are complete.
*
* @returns Promise.
*/
waitUntilComplete(): Promise<void>;
/**
* Aborts all ongoing operations.
*/
abort(): Promise<void>;
/**
* Creates a new incognito context.
*
* @returns Context.
*/
newIncognitoContext(): BrowserContext;
/**
* Creates a new page.
*
* @returns Page.
*/
newPage(): BrowserPage;
}
//# sourceMappingURL=Browser.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"Browser.d.ts","sourceRoot":"","sources":["../../src/browser/Browser.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,6BAA6B,CAAC;AAC3D,OAAO,cAAc,MAAM,qBAAqB,CAAC;AACjD,OAAO,wBAAwB,MAAM,qCAAqC,CAAC;AAE3E,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,QAAQ,MAAM,qBAAqB,CAAC;AAC3C,OAAO,wBAAwB,MAAM,yCAAyC,CAAC;AAC/E,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AAGvD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,OAAQ,YAAW,QAAQ;IAC/C,SAAgB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3C,SAAgB,QAAQ,EAAE,gBAAgB,CAAC;IAC3C,SAAgB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAAQ;IAElF;;;;;;OAMG;gBACS,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,wBAAwB,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE;IAShF;;;;OAIG;IACH,IAAW,cAAc,IAAI,cAAc,CAK1C;IAED;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKnC;;;;OAIG;IACU,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAO/C;;OAEG;IACI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAa7B;;;;OAIG;IACI,mBAAmB,IAAI,cAAc;IAS5C;;;;OAIG;IACI,OAAO,IAAI,WAAW;CAM7B"}

98
frontend/node_modules/happy-dom/lib/browser/Browser.js generated vendored Normal file
View File

@@ -0,0 +1,98 @@
import BrowserContext from './BrowserContext.js';
import BrowserSettingsFactory from './BrowserSettingsFactory.js';
import BrowserExceptionObserver from './utilities/BrowserExceptionObserver.js';
import * as PropertySymbol from '../PropertySymbol.js';
import BrowserErrorCaptureEnum from './enums/BrowserErrorCaptureEnum.js';
/**
* Browser.
*/
export default class Browser {
contexts;
settings;
console;
[PropertySymbol.exceptionObserver] = null;
/**
* Constructor.
*
* @param [options] Options.
* @param [options.settings] Browser settings.
* @param [options.console] Console.
*/
constructor(options) {
this.console = options?.console || null;
this.settings = BrowserSettingsFactory.createSettings(options?.settings);
if (this.settings.errorCapture === BrowserErrorCaptureEnum.processLevel) {
this[PropertySymbol.exceptionObserver] = new BrowserExceptionObserver();
}
this.contexts = [new BrowserContext(this)];
}
/**
* Returns the default context.
*
* @returns Default context.
*/
get defaultContext() {
if (this.contexts.length === 0) {
throw new Error('No default context. The browser has been closed.');
}
return this.contexts[0];
}
/**
* Aborts all ongoing operations and destroys the browser.
*/
async close() {
await Promise.all(this.contexts.slice().map((context) => context.close()));
this.contexts = [];
}
/**
* Returns a promise that is resolved when all resources has been loaded, fetch has completed, and all async tasks such as timers are complete.
*
* @returns Promise.
*/
async waitUntilComplete() {
if (this.contexts.length === 0) {
throw new Error('No default context. The browser has been closed.');
}
await Promise.all(this.contexts.map((page) => page.waitUntilComplete()));
}
/**
* Aborts all ongoing operations.
*/
abort() {
// Using Promise instead of async/await to prevent microtask
return new Promise((resolve, reject) => {
if (!this.contexts.length) {
resolve();
return;
}
Promise.all(this.contexts.slice().map((context) => context.abort()))
.then(() => resolve())
.catch((error) => reject(error));
});
}
/**
* Creates a new incognito context.
*
* @returns Context.
*/
newIncognitoContext() {
if (this.contexts.length === 0) {
throw new Error('No default context. The browser has been closed.');
}
const context = new BrowserContext(this);
this.contexts.push(context);
return context;
}
/**
* Creates a new page.
*
* @returns Page.
*/
newPage() {
if (this.contexts.length === 0) {
throw new Error('No default context. The browser has been closed.');
}
return this.contexts[0].newPage();
}
}
//# sourceMappingURL=Browser.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"Browser.js","sourceRoot":"","sources":["../../src/browser/Browser.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,43 @@
import ICookieContainer from '../cookie/ICookieContainer.js';
import IResponseCache from '../fetch/cache/response/IResponseCache.js';
import Browser from './Browser.js';
import BrowserPage from './BrowserPage.js';
import IBrowserContext from './types/IBrowserContext.js';
import IPreflightResponseCache from '../fetch/cache/preflight/IPreflightResponseCache.js';
/**
* Browser context.
*/
export default class BrowserContext implements IBrowserContext {
readonly pages: BrowserPage[];
readonly browser: Browser;
readonly cookieContainer: ICookieContainer;
readonly responseCache: IResponseCache;
readonly preflightResponseCache: IPreflightResponseCache;
/**
* Constructor.
*
* @param browser
*/
constructor(browser: Browser);
/**
* Aborts all ongoing operations and destroys the context.
*/
close(): Promise<void>;
/**
* Returns a promise that is resolved when all resources has been loaded, fetch has completed, and all async tasks such as timers are complete.
*
* @returns Promise.
*/
waitUntilComplete(): Promise<void>;
/**
* Aborts all ongoing operations.
*/
abort(): Promise<void>;
/**
* Creates a new page.
*
* @returns Page.
*/
newPage(): BrowserPage;
}
//# sourceMappingURL=BrowserContext.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"BrowserContext.d.ts","sourceRoot":"","sources":["../../src/browser/BrowserContext.ts"],"names":[],"mappings":"AACA,OAAO,gBAAgB,MAAM,+BAA+B,CAAC;AAC7D,OAAO,cAAc,MAAM,2CAA2C,CAAC;AAEvE,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,eAAe,MAAM,4BAA4B,CAAC;AACzD,OAAO,uBAAuB,MAAM,qDAAqD,CAAC;AAG1F;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,cAAe,YAAW,eAAe;IAC7D,SAAgB,KAAK,EAAE,WAAW,EAAE,CAAM;IAC1C,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,eAAe,EAAE,gBAAgB,CAAyB;IAC1E,SAAgB,aAAa,EAAE,cAAc,CAAuB;IACpE,SAAgB,sBAAsB,EAAE,uBAAuB,CAAgC;IAE/F;;;;OAIG;gBACS,OAAO,EAAE,OAAO;IAI5B;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBnC;;;;OAIG;IACU,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/C;;OAEG;IACI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAY7B;;;;OAIG;IACI,OAAO,IAAI,WAAW;CAK7B"}

View File

@@ -0,0 +1,79 @@
import CookieContainer from '../cookie/CookieContainer.js';
import ResponseCache from '../fetch/cache/response/ResponseCache.js';
import BrowserPage from './BrowserPage.js';
import PreflightResponseCache from '../fetch/cache/preflight/PreflightResponseCache.js';
/**
* Browser context.
*/
export default class BrowserContext {
pages = [];
browser;
cookieContainer = new CookieContainer();
responseCache = new ResponseCache();
preflightResponseCache = new PreflightResponseCache();
/**
* Constructor.
*
* @param browser
*/
constructor(browser) {
this.browser = browser;
}
/**
* Aborts all ongoing operations and destroys the context.
*/
async close() {
if (!this.browser) {
return;
}
await Promise.all(this.pages.slice().map((page) => page.close()));
const browser = this.browser;
const index = browser.contexts.indexOf(this);
if (index !== -1) {
browser.contexts.splice(index, 1);
}
this.pages = [];
this.browser = null;
this.cookieContainer = null;
this.responseCache.clear();
this.preflightResponseCache.clear();
this.responseCache = null;
this.preflightResponseCache = null;
if (browser.contexts.length === 0) {
browser.close();
}
}
/**
* Returns a promise that is resolved when all resources has been loaded, fetch has completed, and all async tasks such as timers are complete.
*
* @returns Promise.
*/
async waitUntilComplete() {
await Promise.all(this.pages.map((page) => page.waitUntilComplete()));
}
/**
* Aborts all ongoing operations.
*/
abort() {
return new Promise((resolve, reject) => {
if (!this.pages.length) {
resolve();
return;
}
Promise.all(this.pages.slice().map((page) => page.abort()))
.then(() => resolve())
.catch((error) => reject(error));
});
}
/**
* Creates a new page.
*
* @returns Page.
*/
newPage() {
const page = new BrowserPage(this);
this.pages.push(page);
return page;
}
}
//# sourceMappingURL=BrowserContext.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"BrowserContext.js","sourceRoot":"","sources":["../../src/browser/BrowserContext.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,118 @@
import BrowserPage from './BrowserPage.js';
import * as PropertySymbol from '../PropertySymbol.js';
import IBrowserFrame from './types/IBrowserFrame.js';
import BrowserWindow from '../window/BrowserWindow.js';
import CrossOriginBrowserWindow from '../window/CrossOriginBrowserWindow.js';
import Response from '../fetch/Response.js';
import IGoToOptions from './types/IGoToOptions.js';
import { Script } from 'vm';
import IReloadOptions from './types/IReloadOptions.js';
import Document from '../nodes/document/Document.js';
import IHistoryItem from '../history/IHistoryItem.js';
/**
* Browser frame.
*/
export default class BrowserFrame implements IBrowserFrame {
readonly childFrames: BrowserFrame[];
readonly parentFrame: BrowserFrame | null;
readonly page: BrowserPage;
readonly window: BrowserWindow;
[PropertySymbol.asyncTaskManager]: any;
[PropertySymbol.listeners]: {
navigation: Array<() => void>;
};
[PropertySymbol.openerFrame]: IBrowserFrame | null;
[PropertySymbol.openerWindow]: BrowserWindow | CrossOriginBrowserWindow | null;
[PropertySymbol.popup]: boolean;
[PropertySymbol.history]: IHistoryItem[];
/**
* Constructor.
*
* @param page Page.
*/
constructor(page: BrowserPage);
/**
* Returns the content.
*
* @returns Content.
*/
get content(): string;
/**
* Sets the content.
*
* @param content Content.
*/
set content(content: string);
/**
* Returns the URL.
*
* @returns URL.
*/
get url(): string;
/**
* Sets the content.
*
* @param url URL.
*/
set url(url: string);
/**
* Returns document.
*
* @returns Document.
*/
get document(): Document;
/**
* Returns a promise that is resolved when all resources has been loaded, fetch has completed, and all async tasks such as timers are complete.
*/
waitUntilComplete(): Promise<void>;
/**
* Returns a promise that is resolved when the frame has navigated and the response HTML has been written to the document.
*/
waitForNavigation(): Promise<void>;
/**
* Aborts all ongoing operations.
*/
abort(): Promise<void>;
/**
* Evaluates code or a VM Script in the page's context.
*
* @param script Script.
* @returns Result.
*/
evaluate(script: string | Script): any;
/**
* Go to a page.
*
* @param url URL.
* @param [options] Options.
* @returns Response.
*/
goto(url: string, options?: IGoToOptions): Promise<Response | null>;
/**
* Navigates back in history.
*
* @param [options] Options.
*/
goBack(options?: IGoToOptions): Promise<Response | null>;
/**
* Navigates forward in history.
*
* @param [options] Options.
*/
goForward(options?: IGoToOptions): Promise<Response | null>;
/**
* Navigates a delta in history.
*
* @param steps Steps.
* @param [options] Options.
*/
goSteps(steps?: number, options?: IGoToOptions): Promise<Response | null>;
/**
* Reloads the current frame.
*
* @param [options] Options.
* @returns Response.
*/
reload(options?: IReloadOptions): Promise<Response | null>;
}
//# sourceMappingURL=BrowserFrame.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"BrowserFrame.d.ts","sourceRoot":"","sources":["../../src/browser/BrowserFrame.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AAEvD,OAAO,aAAa,MAAM,0BAA0B,CAAC;AACrD,OAAO,aAAa,MAAM,4BAA4B,CAAC;AACvD,OAAO,wBAAwB,MAAM,uCAAuC,CAAC;AAC7E,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,YAAY,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAI5B,OAAO,cAAc,MAAM,2BAA2B,CAAC;AACvD,OAAO,QAAQ,MAAM,+BAA+B,CAAC;AACrD,OAAO,YAAY,MAAM,4BAA4B,CAAC;AAGtD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,YAAa,YAAW,aAAa;IACzD,SAAgB,WAAW,EAAE,YAAY,EAAE,CAAM;IACjD,SAAgB,WAAW,EAAE,YAAY,GAAG,IAAI,CAAQ;IACxD,SAAgB,IAAI,EAAE,WAAW,CAAC;IAClC,SAAgB,MAAM,EAAE,aAAa,CAAC;IAC/B,CAAC,cAAc,CAAC,gBAAgB,CAAC,MAA8B;IAC/D,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;QAAE,UAAU,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAA;KAAE,CAAsB;IACnF,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,aAAa,GAAG,IAAI,CAAQ;IAC1D,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,aAAa,GAAG,wBAAwB,GAAG,IAAI,CAAQ;IACtF,CAAC,cAAc,CAAC,KAAK,CAAC,UAAS;IAC/B,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,CAU7C;IAEF;;;;OAIG;gBACS,IAAI,EAAE,WAAW;IAU7B;;;;OAIG;IACH,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED;;;;OAIG;IACH,IAAW,OAAO,CAAC,OAAO,EATJ,MASI,EAKzB;IAED;;;;OAIG;IACH,IAAW,GAAG,IAAI,MAAM,CAEvB;IAED;;;;OAIG;IACH,IAAW,GAAG,CAAC,GAAG,EATA,MASA,EAKjB;IAED;;;;OAIG;IACH,IAAW,QAAQ,IAAI,QAAQ,CAE9B;IAED;;OAEG;IACU,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAO/C;;OAEG;IACI,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzC;;OAEG;IACI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB7B;;;;;OAKG;IACI,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG;IAI7C;;;;;;OAMG;IACI,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAS1E;;;;OAIG;IACI,MAAM,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAQ/D;;;;OAIG;IACI,SAAS,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAQlE;;;;;OAKG;IACI,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAShF;;;;;OAKG;IACI,MAAM,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;CAOjE"}

View File

@@ -0,0 +1,195 @@
import * as PropertySymbol from '../PropertySymbol.js';
import AsyncTaskManager from '../async-task-manager/AsyncTaskManager.js';
import BrowserWindow from '../window/BrowserWindow.js';
import BrowserFrameURL from './utilities/BrowserFrameURL.js';
import BrowserFrameScriptEvaluator from './utilities/BrowserFrameScriptEvaluator.js';
import BrowserFrameNavigator from './utilities/BrowserFrameNavigator.js';
import HistoryScrollRestorationEnum from '../history/HistoryScrollRestorationEnum.js';
/**
* Browser frame.
*/
export default class BrowserFrame {
childFrames = [];
parentFrame = null;
page;
window;
[PropertySymbol.asyncTaskManager] = new AsyncTaskManager(this);
[PropertySymbol.listeners] = { navigation: [] };
[PropertySymbol.openerFrame] = null;
[PropertySymbol.openerWindow] = null;
[PropertySymbol.popup] = false;
[PropertySymbol.history] = [
{
title: '',
href: 'about:blank',
state: null,
scrollRestoration: HistoryScrollRestorationEnum.auto,
method: 'GET',
formData: null,
isCurrent: true
}
];
/**
* Constructor.
*
* @param page Page.
*/
constructor(page) {
this.page = page;
this.window = new BrowserWindow(this);
// Attach process level error capturing.
if (page.context.browser[PropertySymbol.exceptionObserver]) {
page.context.browser[PropertySymbol.exceptionObserver].observe(this.window);
}
}
/**
* Returns the content.
*
* @returns Content.
*/
get content() {
return this.window.document.documentElement.outerHTML;
}
/**
* Sets the content.
*
* @param content Content.
*/
set content(content) {
this.window.document[PropertySymbol.isFirstWrite] = true;
this.window.document[PropertySymbol.isFirstWriteAfterOpen] = false;
this.window.document.open();
this.window.document.write(content);
}
/**
* Returns the URL.
*
* @returns URL.
*/
get url() {
return this.window.location.href;
}
/**
* Sets the content.
*
* @param url URL.
*/
set url(url) {
this.window[PropertySymbol.location][PropertySymbol.setURL](this, BrowserFrameURL.getRelativeURL(this, url).href);
}
/**
* Returns document.
*
* @returns Document.
*/
get document() {
return this.window?.document ?? null;
}
/**
* Returns a promise that is resolved when all resources has been loaded, fetch has completed, and all async tasks such as timers are complete.
*/
async waitUntilComplete() {
await Promise.all([
this[PropertySymbol.asyncTaskManager].waitUntilComplete(),
...this.childFrames.map((frame) => frame.waitUntilComplete())
]);
}
/**
* Returns a promise that is resolved when the frame has navigated and the response HTML has been written to the document.
*/
waitForNavigation() {
return new Promise((resolve) => this[PropertySymbol.listeners].navigation.push(resolve));
}
/**
* Aborts all ongoing operations.
*/
abort() {
if (!this.childFrames.length) {
return this[PropertySymbol.asyncTaskManager].abort();
}
return new Promise((resolve, reject) => {
// Using Promise instead of async/await to prevent microtask
Promise.all(this.childFrames
.map((frame) => frame.abort())
.concat([this[PropertySymbol.asyncTaskManager].abort()]))
.then(() => resolve())
.catch(reject);
});
}
/**
* Evaluates code or a VM Script in the page's context.
*
* @param script Script.
* @returns Result.
*/
evaluate(script) {
return BrowserFrameScriptEvaluator.evaluate(this, script);
}
/**
* Go to a page.
*
* @param url URL.
* @param [options] Options.
* @returns Response.
*/
goto(url, options) {
return BrowserFrameNavigator.navigate({
windowClass: BrowserWindow,
frame: this,
url: url,
goToOptions: options
});
}
/**
* Navigates back in history.
*
* @param [options] Options.
*/
goBack(options) {
return BrowserFrameNavigator.navigateBack({
windowClass: BrowserWindow,
frame: this,
goToOptions: options
});
}
/**
* Navigates forward in history.
*
* @param [options] Options.
*/
goForward(options) {
return BrowserFrameNavigator.navigateForward({
windowClass: BrowserWindow,
frame: this,
goToOptions: options
});
}
/**
* Navigates a delta in history.
*
* @param steps Steps.
* @param [options] Options.
*/
goSteps(steps, options) {
return BrowserFrameNavigator.navigateSteps({
windowClass: BrowserWindow,
frame: this,
steps: steps,
goToOptions: options
});
}
/**
* Reloads the current frame.
*
* @param [options] Options.
* @returns Response.
*/
reload(options) {
return BrowserFrameNavigator.reload({
windowClass: BrowserWindow,
frame: this,
goToOptions: options
});
}
}
//# sourceMappingURL=BrowserFrame.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"BrowserFrame.js","sourceRoot":"","sources":["../../src/browser/BrowserFrame.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,117 @@
import VirtualConsolePrinter from '../console/VirtualConsolePrinter.js';
import BrowserFrame from './BrowserFrame.js';
import BrowserContext from './BrowserContext.js';
import IBrowserPage from './types/IBrowserPage.js';
import { Script } from 'vm';
import IGoToOptions from './types/IGoToOptions.js';
import Response from '../fetch/Response.js';
import IReloadOptions from './types/IReloadOptions.js';
import IBrowserPageViewport from './types/IBrowserPageViewport.js';
import IOptionalBrowserPageViewport from './types/IOptionalBrowserPageViewport.js';
/**
* Browser page.
*/
export default class BrowserPage implements IBrowserPage {
readonly virtualConsolePrinter: VirtualConsolePrinter;
readonly mainFrame: BrowserFrame;
readonly context: BrowserContext;
readonly console: Console;
readonly viewport: IBrowserPageViewport;
/**
* Constructor.
*
* @param context Browser context.
*/
constructor(context: BrowserContext);
/**
* Returns frames.
*/
get frames(): BrowserFrame[];
/**
* Returns the viewport.
*/
get content(): string;
/**
* Sets the content.
*
* @param content Content.
*/
set content(content: string);
/**
* Returns the URL.
*
* @returns URL.
*/
get url(): string;
/**
* Sets the content.
*
* @param url URL.
*/
set url(url: string);
/**
* Aborts all ongoing operations and destroys the page.
*/
close(): Promise<void>;
/**
* Returns a promise that is resolved when all resources has been loaded, fetch has completed, and all async tasks such as timers are complete.
*/
waitUntilComplete(): Promise<void>;
/**
* Returns a promise that is resolved when the page has navigated and the response HTML has been written to the document.
*/
waitForNavigation(): Promise<void>;
/**
* Aborts all ongoing operations.
*/
abort(): Promise<void>;
/**
* Evaluates code or a VM Script in the page's context.
*
* @param script Script.
* @returns Result.
*/
evaluate(script: string | Script): any;
/**
* Sets the viewport.
*
* @param viewport Viewport.
*/
setViewport(viewport: IOptionalBrowserPageViewport): void;
/**
* Go to a page.
*
* @param url URL.
* @param [options] Options.
* @returns Response.
*/
goto(url: string, options?: IGoToOptions): Promise<Response | null>;
/**
* Navigates back in history.
*
* @param [options] Options.
*/
goBack(options?: IGoToOptions): Promise<Response | null>;
/**
* Navigates forward in history.
*
* @param [options] Options.
*/
goForward(options?: IGoToOptions): Promise<Response | null>;
/**
* Navigates a delta in history.
*
* @param delta Delta.
* @param steps
* @param [options] Options.
*/
goSteps(steps?: number, options?: IGoToOptions): Promise<Response | null>;
/**
* Reloads the current page.
*
* @param [options] Options.
* @returns Response.
*/
reload(options?: IReloadOptions): Promise<Response | null>;
}
//# sourceMappingURL=BrowserPage.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"BrowserPage.d.ts","sourceRoot":"","sources":["../../src/browser/BrowserPage.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,MAAM,qCAAqC,CAAC;AACxE,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAC7C,OAAO,cAAc,MAAM,qBAAqB,CAAC;AAEjD,OAAO,YAAY,MAAM,yBAAyB,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,YAAY,MAAM,yBAAyB,CAAC;AACnD,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,cAAc,MAAM,2BAA2B,CAAC;AACvD,OAAO,oBAAoB,MAAM,iCAAiC,CAAC;AACnE,OAAO,4BAA4B,MAAM,yCAAyC,CAAC;AAInF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,WAAY,YAAW,YAAY;IACvD,SAAgB,qBAAqB,wBAA+B;IACpE,SAAgB,SAAS,EAAE,YAAY,CAAC;IACxC,SAAgB,OAAO,EAAE,cAAc,CAAC;IACxC,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,QAAQ,EAAE,oBAAoB,CAAiD;IAE/F;;;;OAIG;gBACS,OAAO,EAAE,cAAc;IAMnC;;OAEG;IACH,IAAW,MAAM,IAAI,YAAY,EAAE,CAElC;IAED;;OAEG;IACH,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED;;;;OAIG;IACH,IAAW,OAAO,CAAC,OAAO,EATJ,MASI,EAEzB;IAED;;;;OAIG;IACH,IAAW,GAAG,IAAI,MAAM,CAEvB;IAED;;;;OAIG;IACH,IAAW,GAAG,CAAC,GAAG,EATA,MASA,EAEjB;IAED;;OAEG;IACI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B;;OAEG;IACI,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzC;;OAEG;IACI,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzC;;OAEG;IACI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B;;;;;OAKG;IACI,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG;IAI7C;;;;OAIG;IACI,WAAW,CAAC,QAAQ,EAAE,4BAA4B,GAAG,IAAI;IAYhE;;;;;;OAMG;IACI,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAI1E;;;;OAIG;IACI,MAAM,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAI/D;;;;OAIG;IACI,SAAS,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAIlE;;;;;;OAMG;IACI,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAIhF;;;;;OAKG;IACI,MAAM,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;CAGjE"}

View File

@@ -0,0 +1,155 @@
import VirtualConsolePrinter from '../console/VirtualConsolePrinter.js';
import BrowserFrame from './BrowserFrame.js';
import VirtualConsole from '../console/VirtualConsole.js';
import BrowserPageUtility from './utilities/BrowserPageUtility.js';
import DefaultBrowserPageViewport from './DefaultBrowserPageViewport.js';
import Event from '../event/Event.js';
/**
* Browser page.
*/
export default class BrowserPage {
virtualConsolePrinter = new VirtualConsolePrinter();
mainFrame;
context;
console;
viewport = Object.assign({}, DefaultBrowserPageViewport);
/**
* Constructor.
*
* @param context Browser context.
*/
constructor(context) {
this.context = context;
this.console = context.browser.console ?? new VirtualConsole(this.virtualConsolePrinter);
this.mainFrame = new BrowserFrame(this);
}
/**
* Returns frames.
*/
get frames() {
return BrowserPageUtility.getFrames(this);
}
/**
* Returns the viewport.
*/
get content() {
return this.mainFrame.content;
}
/**
* Sets the content.
*
* @param content Content.
*/
set content(content) {
this.mainFrame.content = content;
}
/**
* Returns the URL.
*
* @returns URL.
*/
get url() {
return this.mainFrame.url;
}
/**
* Sets the content.
*
* @param url URL.
*/
set url(url) {
this.mainFrame.url = url;
}
/**
* Aborts all ongoing operations and destroys the page.
*/
close() {
return BrowserPageUtility.closePage(this);
}
/**
* Returns a promise that is resolved when all resources has been loaded, fetch has completed, and all async tasks such as timers are complete.
*/
waitUntilComplete() {
return this.mainFrame.waitUntilComplete();
}
/**
* Returns a promise that is resolved when the page has navigated and the response HTML has been written to the document.
*/
waitForNavigation() {
return this.mainFrame.waitForNavigation();
}
/**
* Aborts all ongoing operations.
*/
abort() {
return this.mainFrame.abort();
}
/**
* Evaluates code or a VM Script in the page's context.
*
* @param script Script.
* @returns Result.
*/
evaluate(script) {
return this.mainFrame.evaluate(script);
}
/**
* Sets the viewport.
*
* @param viewport Viewport.
*/
setViewport(viewport) {
const previousViewport = Object.assign({}, this.viewport);
Object.assign(this.viewport, viewport);
if (previousViewport.width !== this.viewport.width ||
previousViewport.height !== this.viewport.height ||
previousViewport.devicePixelRatio !== this.viewport.devicePixelRatio) {
this.mainFrame.window.dispatchEvent(new Event('resize'));
}
}
/**
* Go to a page.
*
* @param url URL.
* @param [options] Options.
* @returns Response.
*/
goto(url, options) {
return this.mainFrame.goto(url, options);
}
/**
* Navigates back in history.
*
* @param [options] Options.
*/
goBack(options) {
return this.mainFrame.goBack(options);
}
/**
* Navigates forward in history.
*
* @param [options] Options.
*/
goForward(options) {
return this.mainFrame.goForward(options);
}
/**
* Navigates a delta in history.
*
* @param delta Delta.
* @param steps
* @param [options] Options.
*/
goSteps(steps, options) {
return this.mainFrame.goSteps(steps, options);
}
/**
* Reloads the current page.
*
* @param [options] Options.
* @returns Response.
*/
reload(options) {
return this.mainFrame.reload(options);
}
}
//# sourceMappingURL=BrowserPage.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"BrowserPage.js","sourceRoot":"","sources":["../../src/browser/BrowserPage.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,16 @@
import IBrowserSettings from './types/IBrowserSettings.js';
import IOptionalBrowserSettings from './types/IOptionalBrowserSettings.js';
/**
* Browser settings utility.
*/
export default class BrowserSettingsFactory {
/**
* Returns browser settings.
*
* @param [settings] Browser settings.
* @param [freezeObject] "true" to freeze the object.
* @returns Settings.
*/
static createSettings(settings?: IOptionalBrowserSettings): IBrowserSettings;
}
//# sourceMappingURL=BrowserSettingsFactory.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"BrowserSettingsFactory.d.ts","sourceRoot":"","sources":["../../src/browser/BrowserSettingsFactory.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,6BAA6B,CAAC;AAC3D,OAAO,wBAAwB,MAAM,qCAAqC,CAAC;AAG3E;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,sBAAsB;IAC1C;;;;;;OAMG;WACW,cAAc,CAAC,QAAQ,CAAC,EAAE,wBAAwB,GAAG,gBAAgB;CA8BnF"}

View File

@@ -0,0 +1,44 @@
import DefaultBrowserSettings from './DefaultBrowserSettings.js';
/**
* Browser settings utility.
*/
export default class BrowserSettingsFactory {
/**
* Returns browser settings.
*
* @param [settings] Browser settings.
* @param [freezeObject] "true" to freeze the object.
* @returns Settings.
*/
static createSettings(settings) {
return {
...DefaultBrowserSettings,
...settings,
navigation: {
...DefaultBrowserSettings.navigation,
...settings?.navigation
},
navigator: {
...DefaultBrowserSettings.navigator,
...settings?.navigator
},
timer: {
...DefaultBrowserSettings.timer,
...settings?.timer
},
fetch: {
...DefaultBrowserSettings.fetch,
...settings?.fetch
},
device: {
...DefaultBrowserSettings.device,
...settings?.device
},
debug: {
...DefaultBrowserSettings.debug,
...settings?.debug
}
};
}
}
//# sourceMappingURL=BrowserSettingsFactory.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"BrowserSettingsFactory.js","sourceRoot":"","sources":["../../src/browser/BrowserSettingsFactory.ts"],"names":[],"mappings":"AAEA,OAAO,sBAAsB,MAAM,6BAA6B,CAAC;AAEjE;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,sBAAsB;IAC1C;;;;;;OAMG;IACI,MAAM,CAAC,cAAc,CAAC,QAAmC;QAC/D,OAAO;YACN,GAAG,sBAAsB;YACzB,GAAG,QAAQ;YACX,UAAU,EAAE;gBACX,GAAG,sBAAsB,CAAC,UAAU;gBACpC,GAAG,QAAQ,EAAE,UAAU;aACvB;YACD,SAAS,EAAE;gBACV,GAAG,sBAAsB,CAAC,SAAS;gBACnC,GAAG,QAAQ,EAAE,SAAS;aACtB;YACD,KAAK,EAAE;gBACN,GAAG,sBAAsB,CAAC,KAAK;gBAC/B,GAAG,QAAQ,EAAE,KAAK;aAClB;YACD,KAAK,EAAE;gBACN,GAAG,sBAAsB,CAAC,KAAK;gBAC/B,GAAG,QAAQ,EAAE,KAAK;aAClB;YACD,MAAM,EAAE;gBACP,GAAG,sBAAsB,CAAC,MAAM;gBAChC,GAAG,QAAQ,EAAE,MAAM;aACnB;YACD,KAAK,EAAE;gBACN,GAAG,sBAAsB,CAAC,KAAK;gBAC/B,GAAG,QAAQ,EAAE,KAAK;aAClB;SACD,CAAC;IACH,CAAC;CACD"}

View File

@@ -0,0 +1,4 @@
import IBrowserPageViewport from './types/IBrowserPageViewport.js';
declare const _default: IBrowserPageViewport;
export default _default;
//# sourceMappingURL=DefaultBrowserPageViewport.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"DefaultBrowserPageViewport.d.ts","sourceRoot":"","sources":["../../src/browser/DefaultBrowserPageViewport.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,MAAM,iCAAiC,CAAC;wBAEnD,oBAAoB;AAApC,wBAIE"}

View File

@@ -0,0 +1,6 @@
export default {
width: 1024,
height: 768,
devicePixelRatio: 1
};
//# sourceMappingURL=DefaultBrowserPageViewport.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"DefaultBrowserPageViewport.js","sourceRoot":"","sources":["../../src/browser/DefaultBrowserPageViewport.ts"],"names":[],"mappings":"AAEA,eAAqC;IACpC,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,GAAG;IACX,gBAAgB,EAAE,CAAC;CACnB,CAAC"}

View File

@@ -0,0 +1,4 @@
import IBrowserSettings from './types/IBrowserSettings.js';
declare const _default: IBrowserSettings;
export default _default;
//# sourceMappingURL=DefaultBrowserSettings.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"DefaultBrowserSettings.d.ts","sourceRoot":"","sources":["../../src/browser/DefaultBrowserSettings.ts"],"names":[],"mappings":"AAGA,OAAO,gBAAgB,MAAM,6BAA6B,CAAC;wBAE3C,gBAAgB;AAAhC,wBA2CE"}

View File

@@ -0,0 +1,46 @@
import PackageVersion from '../version.js';
import BrowserErrorCaptureEnum from './enums/BrowserErrorCaptureEnum.js';
import BrowserNavigationCrossOriginPolicyEnum from './enums/BrowserNavigationCrossOriginPolicyEnum.js';
export default {
disableJavaScriptEvaluation: false,
disableJavaScriptFileLoading: false,
disableCSSFileLoading: false,
disableIframePageLoading: false,
disableComputedStyleRendering: false,
disableErrorCapturing: false,
errorCapture: BrowserErrorCaptureEnum.tryAndCatch,
enableFileSystemHttpRequests: false,
timer: {
maxTimeout: -1,
maxIntervalTime: -1,
maxIntervalIterations: -1,
preventTimerLoops: false
},
fetch: {
disableSameOriginPolicy: false,
disableStrictSSL: false,
interceptor: null,
virtualServers: null
},
navigation: {
disableMainFrameNavigation: false,
disableChildFrameNavigation: false,
disableChildPageNavigation: false,
disableFallbackToSetURL: false,
crossOriginPolicy: BrowserNavigationCrossOriginPolicyEnum.anyOrigin
},
navigator: {
userAgent: `Mozilla/5.0 (X11; ${process.platform.charAt(0).toUpperCase() + process.platform.slice(1) + ' ' + process.arch}) AppleWebKit/537.36 (KHTML, like Gecko) HappyDOM/${PackageVersion.version}`,
maxTouchPoints: 0
},
device: {
prefersColorScheme: 'light',
prefersReducedMotion: 'no-preference',
mediaType: 'screen',
forcedColors: 'none'
},
debug: {
traceWaitUntilComplete: -1
}
};
//# sourceMappingURL=DefaultBrowserSettings.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"DefaultBrowserSettings.js","sourceRoot":"","sources":["../../src/browser/DefaultBrowserSettings.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,eAAe,CAAC;AAC3C,OAAO,uBAAuB,MAAM,oCAAoC,CAAC;AACzE,OAAO,sCAAsC,MAAM,mDAAmD,CAAC;AAGvG,eAAiC;IAChC,2BAA2B,EAAE,KAAK;IAClC,4BAA4B,EAAE,KAAK;IACnC,qBAAqB,EAAE,KAAK;IAC5B,wBAAwB,EAAE,KAAK;IAC/B,6BAA6B,EAAE,KAAK;IACpC,qBAAqB,EAAE,KAAK;IAC5B,YAAY,EAAE,uBAAuB,CAAC,WAAW;IACjD,4BAA4B,EAAE,KAAK;IACnC,KAAK,EAAE;QACN,UAAU,EAAE,CAAC,CAAC;QACd,eAAe,EAAE,CAAC,CAAC;QACnB,qBAAqB,EAAE,CAAC,CAAC;QACzB,iBAAiB,EAAE,KAAK;KACxB;IACD,KAAK,EAAE;QACN,uBAAuB,EAAE,KAAK;QAC9B,gBAAgB,EAAE,KAAK;QACvB,WAAW,EAAE,IAAI;QACjB,cAAc,EAAE,IAAI;KACpB;IACD,UAAU,EAAE;QACX,0BAA0B,EAAE,KAAK;QACjC,2BAA2B,EAAE,KAAK;QAClC,0BAA0B,EAAE,KAAK;QACjC,uBAAuB,EAAE,KAAK;QAC9B,iBAAiB,EAAE,sCAAsC,CAAC,SAAS;KACnE;IACD,SAAS,EAAE;QACV,SAAS,EAAE,qBACV,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC,IACtF,qDAAqD,cAAc,CAAC,OAAO,EAAE;QAC7E,cAAc,EAAE,CAAC;KACjB;IACD,MAAM,EAAE;QACP,kBAAkB,EAAE,OAAO;QAC3B,oBAAoB,EAAE,eAAe;QACrC,SAAS,EAAE,QAAQ;QACnB,YAAY,EAAE,MAAM;KACpB;IACD,KAAK,EAAE;QACN,sBAAsB,EAAE,CAAC,CAAC;KAC1B;CACD,CAAC"}

View File

@@ -0,0 +1,70 @@
import IBrowserSettings from '../types/IBrowserSettings.js';
import DetachedBrowserContext from './DetachedBrowserContext.js';
import IOptionalBrowserSettings from '../types/IOptionalBrowserSettings.js';
import DetachedBrowserPage from './DetachedBrowserPage.js';
import IBrowser from '../types/IBrowser.js';
import IBrowserFrame from '../types/IBrowserFrame.js';
import BrowserWindow from '../../window/BrowserWindow.js';
import * as PropertySymbol from '../../PropertySymbol.js';
import BrowserExceptionObserver from '../utilities/BrowserExceptionObserver.js';
/**
* Detached browser used when constructing a Window instance without a browser.
*/
export default class DetachedBrowser implements IBrowser {
readonly contexts: DetachedBrowserContext[];
readonly settings: IBrowserSettings;
readonly console: Console | null;
readonly windowClass: new (browserFrame: IBrowserFrame, options?: {
url?: string;
width?: number;
height?: number;
}) => BrowserWindow | null;
[PropertySymbol.exceptionObserver]: BrowserExceptionObserver | null;
/**
* Constructor.
*
* @param windowClass Window class.
* @param [options] Options.
* @param [options.settings] Browser settings.
* @param [options.console] Console.
*/
constructor(windowClass: new (browserFrame: IBrowserFrame, options?: {
url?: string;
width?: number;
height?: number;
}) => BrowserWindow, options?: {
settings?: IOptionalBrowserSettings;
console?: Console;
});
/**
* Returns the default context.
*
* @returns Default context.
*/
get defaultContext(): DetachedBrowserContext;
/**
* Aborts all ongoing operations and destroys the browser.
*/
close(): Promise<void>;
/**
* Returns a promise that is resolved when all resources has been loaded, fetch has completed, and all async tasks such as timers are complete.
*
* @returns Promise.
*/
waitUntilComplete(): Promise<void>;
/**
* Aborts all ongoing operations.
*/
abort(): Promise<void>;
/**
* Creates a new incognito context.
*/
newIncognitoContext(): DetachedBrowserContext;
/**
* Creates a new page.
*
* @returns Page.
*/
newPage(): DetachedBrowserPage;
}
//# sourceMappingURL=DetachedBrowser.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"DetachedBrowser.d.ts","sourceRoot":"","sources":["../../../src/browser/detached-browser/DetachedBrowser.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,8BAA8B,CAAC;AAC5D,OAAO,sBAAsB,MAAM,6BAA6B,CAAC;AACjE,OAAO,wBAAwB,MAAM,sCAAsC,CAAC;AAE5E,OAAO,mBAAmB,MAAM,0BAA0B,CAAC;AAC3D,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,aAAa,MAAM,2BAA2B,CAAC;AACtD,OAAO,aAAa,MAAM,+BAA+B,CAAC;AAC1D,OAAO,KAAK,cAAc,MAAM,yBAAyB,CAAC;AAE1D,OAAO,wBAAwB,MAAM,0CAA0C,CAAC;AAEhF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,eAAgB,YAAW,QAAQ;IACvD,SAAgB,QAAQ,EAAE,sBAAsB,EAAE,CAAC;IACnD,SAAgB,QAAQ,EAAE,gBAAgB,CAAC;IAC3C,SAAgB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxC,SAAgB,WAAW,EAAE,KAC5B,YAAY,EAAE,aAAa,EAC3B,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KACvD,aAAa,GAAG,IAAI,CAAC;IACnB,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAAQ;IAElF;;;;;;;OAOG;gBAEF,WAAW,EAAE,KACZ,YAAY,EAAE,aAAa,EAC3B,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KACvD,aAAa,EAClB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,wBAAwB,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE;IAYrE;;;;OAIG;IACH,IAAW,cAAc,IAAI,sBAAsB,CAKlD;IAED;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOnC;;;;OAIG;IACU,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/C;;OAEG;IACI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAa7B;;OAEG;IACI,mBAAmB,IAAI,sBAAsB;IAIpD;;;;OAIG;IACI,OAAO,IAAI,mBAAmB;CAMrC"}

View File

@@ -0,0 +1,94 @@
import DetachedBrowserContext from './DetachedBrowserContext.js';
import BrowserSettingsFactory from '../BrowserSettingsFactory.js';
import * as PropertySymbol from '../../PropertySymbol.js';
import BrowserErrorCaptureEnum from '../enums/BrowserErrorCaptureEnum.js';
import BrowserExceptionObserver from '../utilities/BrowserExceptionObserver.js';
/**
* Detached browser used when constructing a Window instance without a browser.
*/
export default class DetachedBrowser {
contexts;
settings;
console;
windowClass;
[PropertySymbol.exceptionObserver] = null;
/**
* Constructor.
*
* @param windowClass Window class.
* @param [options] Options.
* @param [options.settings] Browser settings.
* @param [options.console] Console.
*/
constructor(windowClass, options) {
this.windowClass = windowClass;
this.console = options?.console || null;
this.settings = BrowserSettingsFactory.createSettings(options?.settings);
if (this.settings.errorCapture === BrowserErrorCaptureEnum.processLevel) {
this[PropertySymbol.exceptionObserver] = new BrowserExceptionObserver();
}
this.contexts = [];
this.contexts.push(new DetachedBrowserContext(this));
}
/**
* Returns the default context.
*
* @returns Default context.
*/
get defaultContext() {
if (this.contexts.length === 0) {
throw new Error('No default context. The browser has been closed.');
}
return this.contexts[0];
}
/**
* Aborts all ongoing operations and destroys the browser.
*/
async close() {
await Promise.all(this.contexts.slice().map((context) => context.close()));
this.contexts = [];
this.console = null;
this.windowClass = null;
}
/**
* Returns a promise that is resolved when all resources has been loaded, fetch has completed, and all async tasks such as timers are complete.
*
* @returns Promise.
*/
async waitUntilComplete() {
await Promise.all(this.contexts.map((page) => page.waitUntilComplete()));
}
/**
* Aborts all ongoing operations.
*/
abort() {
// Using Promise instead of async/await to prevent microtask
return new Promise((resolve, reject) => {
if (!this.contexts.length) {
resolve();
return;
}
Promise.all(this.contexts.slice().map((context) => context.abort()))
.then(() => resolve())
.catch((error) => reject(error));
});
}
/**
* Creates a new incognito context.
*/
newIncognitoContext() {
throw new Error('Not possible to create a new context on a detached browser.');
}
/**
* Creates a new page.
*
* @returns Page.
*/
newPage() {
if (this.contexts.length === 0) {
throw new Error('No default context. The browser has been closed.');
}
return this.contexts[0].newPage();
}
}
//# sourceMappingURL=DetachedBrowser.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"DetachedBrowser.js","sourceRoot":"","sources":["../../../src/browser/detached-browser/DetachedBrowser.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,44 @@
import DetachedBrowser from './DetachedBrowser.js';
import DetachedBrowserPage from './DetachedBrowserPage.js';
import IBrowserContext from '../types/IBrowserContext.js';
import ICookieContainer from '../../cookie/ICookieContainer.js';
import IResponseCache from '../../fetch/cache/response/IResponseCache.js';
import IPreflightResponseCache from '../../fetch/cache/preflight/IPreflightResponseCache.js';
/**
* Detached browser context used when constructing a Window instance without a browser.
*/
export default class DetachedBrowserContext implements IBrowserContext {
readonly pages: DetachedBrowserPage[];
readonly browser: DetachedBrowser;
readonly cookieContainer: ICookieContainer;
readonly responseCache: IResponseCache;
readonly preflightResponseCache: IPreflightResponseCache;
/**
* Constructor.
*
* @param browser Browser.
*/
constructor(browser: DetachedBrowser);
/**
* Aborts all ongoing operations and destroys the context.
*/
close(): Promise<void>;
/**
* Returns a promise that is resolved when all resources has been loaded, fetch has completed, and all async tasks such as timers are complete.
*
* @returns Promise.
*/
waitUntilComplete(): Promise<void>;
/**
* Aborts all ongoing operations.
*/
abort(): Promise<void>;
/**
* Creates a new page.
*
* @param [opener] Opener.
* @returns Page.
*/
newPage(): DetachedBrowserPage;
}
//# sourceMappingURL=DetachedBrowserContext.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"DetachedBrowserContext.d.ts","sourceRoot":"","sources":["../../../src/browser/detached-browser/DetachedBrowserContext.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,sBAAsB,CAAC;AACnD,OAAO,mBAAmB,MAAM,0BAA0B,CAAC;AAC3D,OAAO,eAAe,MAAM,6BAA6B,CAAC;AAC1D,OAAO,gBAAgB,MAAM,kCAAkC,CAAC;AAGhE,OAAO,cAAc,MAAM,8CAA8C,CAAC;AAC1E,OAAO,uBAAuB,MAAM,wDAAwD,CAAC;AAG7F;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,sBAAuB,YAAW,eAAe;IACrE,SAAgB,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7C,SAAgB,OAAO,EAAE,eAAe,CAAC;IACzC,SAAgB,eAAe,EAAE,gBAAgB,CAAyB;IAC1E,SAAgB,aAAa,EAAE,cAAc,CAAuB;IACpE,SAAgB,sBAAsB,EAAE,uBAAuB,CAAgC;IAE/F;;;;OAIG;gBACS,OAAO,EAAE,eAAe;IAMpC;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBnC;;;;OAIG;IACU,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/C;;OAEG;IACI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAY7B;;;;;OAKG;IACI,OAAO,IAAI,mBAAmB;CAKrC"}

View File

@@ -0,0 +1,82 @@
import DetachedBrowserPage from './DetachedBrowserPage.js';
import CookieContainer from '../../cookie/CookieContainer.js';
import ResponseCache from '../../fetch/cache/response/ResponseCache.js';
import PreflightResponseCache from '../../fetch/cache/preflight/PreflightResponseCache.js';
/**
* Detached browser context used when constructing a Window instance without a browser.
*/
export default class DetachedBrowserContext {
pages;
browser;
cookieContainer = new CookieContainer();
responseCache = new ResponseCache();
preflightResponseCache = new PreflightResponseCache();
/**
* Constructor.
*
* @param browser Browser.
*/
constructor(browser) {
this.browser = browser;
this.pages = [];
this.pages.push(new DetachedBrowserPage(this));
}
/**
* Aborts all ongoing operations and destroys the context.
*/
async close() {
if (!this.browser) {
return;
}
await Promise.all(this.pages.slice().map((page) => page.close()));
const browser = this.browser;
const index = browser.contexts.indexOf(this);
if (index !== -1) {
browser.contexts.splice(index, 1);
}
this.pages = [];
this.browser = null;
this.cookieContainer = null;
this.responseCache.clear();
this.preflightResponseCache.clear();
this.responseCache = null;
this.preflightResponseCache = null;
if (browser.contexts.length === 0) {
browser.close();
}
}
/**
* Returns a promise that is resolved when all resources has been loaded, fetch has completed, and all async tasks such as timers are complete.
*
* @returns Promise.
*/
async waitUntilComplete() {
await Promise.all(this.pages.map((page) => page.waitUntilComplete()));
}
/**
* Aborts all ongoing operations.
*/
abort() {
return new Promise((resolve, reject) => {
if (!this.pages.length) {
resolve();
return;
}
Promise.all(this.pages.slice().map((page) => page.abort()))
.then(() => resolve())
.catch((error) => reject(error));
});
}
/**
* Creates a new page.
*
* @param [opener] Opener.
* @returns Page.
*/
newPage() {
const page = new DetachedBrowserPage(this);
this.pages.push(page);
return page;
}
}
//# sourceMappingURL=DetachedBrowserContext.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"DetachedBrowserContext.js","sourceRoot":"","sources":["../../../src/browser/detached-browser/DetachedBrowserContext.ts"],"names":[],"mappings":"AACA,OAAO,mBAAmB,MAAM,0BAA0B,CAAC;AAG3D,OAAO,eAAe,MAAM,iCAAiC,CAAC;AAC9D,OAAO,aAAa,MAAM,6CAA6C,CAAC;AAGxE,OAAO,sBAAsB,MAAM,uDAAuD,CAAC;AAE3F;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,sBAAsB;IAC1B,KAAK,CAAwB;IAC7B,OAAO,CAAkB;IACzB,eAAe,GAAqB,IAAI,eAAe,EAAE,CAAC;IAC1D,aAAa,GAAmB,IAAI,aAAa,EAAE,CAAC;IACpD,sBAAsB,GAA4B,IAAI,sBAAsB,EAAE,CAAC;IAE/F;;;;OAIG;IACH,YAAY,OAAwB;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,KAAK;QACjB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO;QACR,CAAC;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YAClB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACnC,CAAC;QACuB,IAAI,CAAC,KAAM,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,OAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,eAAgB,GAAG,IAAI,CAAC;QACvD,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,aAAc,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,sBAAuB,GAAG,IAAI,CAAC;QACpE,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;IACF,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,iBAAiB;QAC7B,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;IACvE,CAAC;IAED;;OAEG;IACI,KAAK;QACX,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACxB,OAAO,EAAE,CAAC;gBACV,OAAO;YACR,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;iBACzD,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;iBACrB,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACI,OAAO;QACb,MAAM,IAAI,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACb,CAAC;CACD"}

View File

@@ -0,0 +1,119 @@
import DetachedBrowserPage from './DetachedBrowserPage.js';
import * as PropertySymbol from '../../PropertySymbol.js';
import IBrowserFrame from '../types/IBrowserFrame.js';
import Response from '../../fetch/Response.js';
import IGoToOptions from '../types/IGoToOptions.js';
import { Script } from 'vm';
import BrowserWindow from '../../window/BrowserWindow.js';
import IReloadOptions from '../types/IReloadOptions.js';
import Document from '../../nodes/document/Document.js';
import CrossOriginBrowserWindow from '../../window/CrossOriginBrowserWindow.js';
import IHistoryItem from '../../history/IHistoryItem.js';
/**
* Browser frame used when constructing a Window instance without a browser.
*/
export default class DetachedBrowserFrame implements IBrowserFrame {
readonly childFrames: DetachedBrowserFrame[];
readonly parentFrame: DetachedBrowserFrame | null;
readonly page: DetachedBrowserPage;
window: BrowserWindow;
[PropertySymbol.asyncTaskManager]: any;
[PropertySymbol.listeners]: {
navigation: Array<() => void>;
};
[PropertySymbol.openerFrame]: IBrowserFrame | null;
[PropertySymbol.openerWindow]: BrowserWindow | CrossOriginBrowserWindow | null;
[PropertySymbol.popup]: boolean;
[PropertySymbol.history]: IHistoryItem[];
/**
* Constructor.
*
* @param page Page.
* @param [window] Window.
*/
constructor(page: DetachedBrowserPage);
/**
* Returns the content.
*
* @returns Content.
*/
get content(): string;
/**
* Sets the content.
*
* @param content Content.
*/
set content(content: string);
/**
* Returns the URL.
*
* @returns URL.
*/
get url(): string;
/**
* Sets the content.
*
* @param url URL.
*/
set url(url: string);
/**
* Returns document.
*
* @returns Document.
*/
get document(): Document;
/**
* Returns a promise that is resolved when all resources has been loaded, fetch has completed, and all async tasks such as timers are complete.
*/
waitUntilComplete(): Promise<void>;
/**
* Returns a promise that is resolved when the frame has navigated and the response HTML has been written to the document.
*/
waitForNavigation(): Promise<void>;
/**
* Aborts all ongoing operations.
*/
abort(): Promise<void>;
/**
* Evaluates code or a VM Script in the page's context.
*
* @param script Script.
* @returns Result.
*/
evaluate(script: string | Script): any;
/**
* Go to a page.
*
* @param url URL.
* @param [options] Options.
* @returns Response.
*/
goto(url: string, options?: IGoToOptions): Promise<Response | null>;
/**
* Navigates back in history.
*
* @param [options] Options.
*/
goBack(options?: IGoToOptions): Promise<Response | null>;
/**
* Navigates forward in history.
*
* @param [options] Options.
*/
goForward(options?: IGoToOptions): Promise<Response | null>;
/**
* Navigates a delta in history.
*
* @param steps Steps.
* @param [options] Options.
*/
goSteps(steps?: number, options?: IGoToOptions): Promise<Response | null>;
/**
* Reloads the current frame.
*
* @param [options] Options.
* @returns Response.
*/
reload(options?: IReloadOptions): Promise<Response | null>;
}
//# sourceMappingURL=DetachedBrowserFrame.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"DetachedBrowserFrame.d.ts","sourceRoot":"","sources":["../../../src/browser/detached-browser/DetachedBrowserFrame.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,cAAc,MAAM,yBAAyB,CAAC;AAE1D,OAAO,aAAa,MAAM,2BAA2B,CAAC;AACtD,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,YAAY,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAI5B,OAAO,aAAa,MAAM,+BAA+B,CAAC;AAC1D,OAAO,cAAc,MAAM,4BAA4B,CAAC;AACxD,OAAO,QAAQ,MAAM,kCAAkC,CAAC;AACxD,OAAO,wBAAwB,MAAM,0CAA0C,CAAC;AAChF,OAAO,YAAY,MAAM,+BAA+B,CAAC;AAGzD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,oBAAqB,YAAW,aAAa;IACjE,SAAgB,WAAW,EAAE,oBAAoB,EAAE,CAAM;IACzD,SAAgB,WAAW,EAAE,oBAAoB,GAAG,IAAI,CAAQ;IAChE,SAAgB,IAAI,EAAE,mBAAmB,CAAC;IAEnC,MAAM,EAAE,aAAa,CAAC;IACtB,CAAC,cAAc,CAAC,gBAAgB,CAAC,MAA8B;IAC/D,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;QAAE,UAAU,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAA;KAAE,CAAsB;IACnF,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,aAAa,GAAG,IAAI,CAAQ;IAC1D,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,aAAa,GAAG,wBAAwB,GAAG,IAAI,CAAQ;IACtF,CAAC,cAAc,CAAC,KAAK,CAAC,UAAS;IAC/B,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,CAU7C;IAEF;;;;;OAKG;gBACS,IAAI,EAAE,mBAAmB;IAYrC;;;;OAIG;IACH,IAAW,OAAO,IAAI,MAAM,CAK3B;IAED;;;;OAIG;IACH,IAAW,OAAO,CAAC,OAAO,EAZJ,MAYI,EAQzB;IAED;;;;OAIG;IACH,IAAW,GAAG,IAAI,MAAM,CAKvB;IAED;;;;OAIG;IACH,IAAW,GAAG,CAAC,GAAG,EAZA,MAYA,EAQjB;IAED;;;;OAIG;IACH,IAAW,QAAQ,IAAI,QAAQ,CAE9B;IAED;;OAEG;IACU,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAO/C;;OAEG;IACI,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzC;;OAEG;IACI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB7B;;;;;OAKG;IACI,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG;IAI7C;;;;;;OAMG;IACI,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAS1E;;;;OAIG;IACI,MAAM,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAQ/D;;;;OAIG;IACI,SAAS,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAQlE;;;;;OAKG;IACI,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAShF;;;;;OAKG;IACI,MAAM,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;CAOjE"}

View File

@@ -0,0 +1,210 @@
import * as PropertySymbol from '../../PropertySymbol.js';
import AsyncTaskManager from '../../async-task-manager/AsyncTaskManager.js';
import BrowserFrameURL from '../utilities/BrowserFrameURL.js';
import BrowserFrameScriptEvaluator from '../utilities/BrowserFrameScriptEvaluator.js';
import BrowserFrameNavigator from '../utilities/BrowserFrameNavigator.js';
import HistoryScrollRestorationEnum from '../../history/HistoryScrollRestorationEnum.js';
/**
* Browser frame used when constructing a Window instance without a browser.
*/
export default class DetachedBrowserFrame {
childFrames = [];
parentFrame = null;
page;
// Needs to be injected from the outside when the browser frame is constructed.
window;
[PropertySymbol.asyncTaskManager] = new AsyncTaskManager(this);
[PropertySymbol.listeners] = { navigation: [] };
[PropertySymbol.openerFrame] = null;
[PropertySymbol.openerWindow] = null;
[PropertySymbol.popup] = false;
[PropertySymbol.history] = [
{
title: '',
href: 'about:blank',
state: null,
scrollRestoration: HistoryScrollRestorationEnum.auto,
method: 'GET',
formData: null,
isCurrent: true
}
];
/**
* Constructor.
*
* @param page Page.
* @param [window] Window.
*/
constructor(page) {
this.page = page;
if (page.context.browser.contexts[0]?.pages[0]?.mainFrame) {
this.window = new this.page.context.browser.windowClass(this);
}
// Attach process level error capturing.
if (page.context.browser[PropertySymbol.exceptionObserver]) {
page.context.browser[PropertySymbol.exceptionObserver].observe(this.window);
}
}
/**
* Returns the content.
*
* @returns Content.
*/
get content() {
if (!this.window) {
throw new Error('The frame has been destroyed, the "window" property is not set.');
}
return this.window.document.documentElement.outerHTML;
}
/**
* Sets the content.
*
* @param content Content.
*/
set content(content) {
if (!this.window) {
throw new Error('The frame has been destroyed, the "window" property is not set.');
}
this.window.document[PropertySymbol.isFirstWrite] = true;
this.window.document[PropertySymbol.isFirstWriteAfterOpen] = false;
this.window.document.open();
this.window.document.write(content);
}
/**
* Returns the URL.
*
* @returns URL.
*/
get url() {
if (!this.window) {
throw new Error('The frame has been destroyed, the "window" property is not set.');
}
return this.window.location.href;
}
/**
* Sets the content.
*
* @param url URL.
*/
set url(url) {
if (!this.window) {
throw new Error('The frame has been destroyed, the "window" property is not set.');
}
this.window[PropertySymbol.location][PropertySymbol.setURL](this, BrowserFrameURL.getRelativeURL(this, url).href);
}
/**
* Returns document.
*
* @returns Document.
*/
get document() {
return this.window?.document ?? null;
}
/**
* Returns a promise that is resolved when all resources has been loaded, fetch has completed, and all async tasks such as timers are complete.
*/
async waitUntilComplete() {
await Promise.all([
this[PropertySymbol.asyncTaskManager].waitUntilComplete(),
...this.childFrames.map((frame) => frame.waitUntilComplete())
]);
}
/**
* Returns a promise that is resolved when the frame has navigated and the response HTML has been written to the document.
*/
waitForNavigation() {
return new Promise((resolve) => this[PropertySymbol.listeners].navigation.push(resolve));
}
/**
* Aborts all ongoing operations.
*/
abort() {
if (!this.childFrames.length) {
return this[PropertySymbol.asyncTaskManager].abort();
}
return new Promise((resolve, reject) => {
// Using Promise instead of async/await to prevent microtask
Promise.all(this.childFrames
.map((frame) => frame.abort())
.concat([this[PropertySymbol.asyncTaskManager].abort()]))
.then(() => resolve())
.catch(reject);
});
}
/**
* Evaluates code or a VM Script in the page's context.
*
* @param script Script.
* @returns Result.
*/
evaluate(script) {
return BrowserFrameScriptEvaluator.evaluate(this, script);
}
/**
* Go to a page.
*
* @param url URL.
* @param [options] Options.
* @returns Response.
*/
goto(url, options) {
return BrowserFrameNavigator.navigate({
windowClass: this.page.context.browser.windowClass,
frame: this,
url: url,
goToOptions: options
});
}
/**
* Navigates back in history.
*
* @param [options] Options.
*/
goBack(options) {
return BrowserFrameNavigator.navigateBack({
windowClass: this.page.context.browser.windowClass,
frame: this,
goToOptions: options
});
}
/**
* Navigates forward in history.
*
* @param [options] Options.
*/
goForward(options) {
return BrowserFrameNavigator.navigateForward({
windowClass: this.page.context.browser.windowClass,
frame: this,
goToOptions: options
});
}
/**
* Navigates a delta in history.
*
* @param steps Steps.
* @param [options] Options.
*/
goSteps(steps, options) {
return BrowserFrameNavigator.navigateSteps({
windowClass: this.page.context.browser.windowClass,
frame: this,
steps: steps,
goToOptions: options
});
}
/**
* Reloads the current frame.
*
* @param [options] Options.
* @returns Response.
*/
reload(options) {
return BrowserFrameNavigator.reload({
windowClass: this.page.context.browser.windowClass,
frame: this,
goToOptions: options
});
}
}
//# sourceMappingURL=DetachedBrowserFrame.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"DetachedBrowserFrame.js","sourceRoot":"","sources":["../../../src/browser/detached-browser/DetachedBrowserFrame.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,117 @@
import VirtualConsolePrinter from '../../console/VirtualConsolePrinter.js';
import DetachedBrowserFrame from './DetachedBrowserFrame.js';
import DetachedBrowserContext from './DetachedBrowserContext.js';
import IBrowserPage from '../types/IBrowserPage.js';
import { Script } from 'vm';
import IGoToOptions from '../types/IGoToOptions.js';
import Response from '../../fetch/Response.js';
import IReloadOptions from '../types/IReloadOptions.js';
import IOptionalBrowserPageViewport from '../types/IOptionalBrowserPageViewport.js';
import IBrowserPageViewport from '../types/IBrowserPageViewport.js';
/**
* Detached browser page used when constructing a Window instance without a browser.
*/
export default class DetachedBrowserPage implements IBrowserPage {
readonly virtualConsolePrinter: VirtualConsolePrinter;
readonly mainFrame: DetachedBrowserFrame;
readonly context: DetachedBrowserContext;
readonly console: Console;
readonly viewport: IBrowserPageViewport;
/**
* Constructor.
*
* @param context Browser context.
*/
constructor(context: DetachedBrowserContext);
/**
* Returns frames.
*/
get frames(): DetachedBrowserFrame[];
/**
* Returns the viewport.
*/
get content(): string;
/**
* Sets the content.
*
* @param content Content.
*/
set content(content: string);
/**
* Returns the URL.
*
* @returns URL.
*/
get url(): string;
/**
* Sets the content.
*
* @param url URL.
*/
set url(url: string);
/**
* Aborts all ongoing operations and destroys the page.
*/
close(): Promise<void>;
/**
* Returns a promise that is resolved when all resources has been loaded, fetch has completed, and all async tasks such as timers are complete.
*/
waitUntilComplete(): Promise<void>;
/**
* Returns a promise that is resolved when the page has navigated and the response HTML has been written to the document.
*/
waitForNavigation(): Promise<void>;
/**
* Aborts all ongoing operations.
*/
abort(): Promise<void>;
/**
* Evaluates code or a VM Script in the page's context.
*
* @param script Script.
* @returns Result.
*/
evaluate(script: string | Script): any;
/**
* Sets the viewport.
*
* @param viewport Viewport.
*/
setViewport(viewport: IOptionalBrowserPageViewport): void;
/**
* Go to a page.
*
* @param url URL.
* @param [options] Options.
* @returns Response.
*/
goto(url: string, options?: IGoToOptions): Promise<Response | null>;
/**
* Navigates back in history.
*
* @param [options] Options.
*/
goBack(options?: IGoToOptions): Promise<Response | null>;
/**
* Navigates forward in history.
*
* @param [options] Options.
*/
goForward(options?: IGoToOptions): Promise<Response | null>;
/**
* Navigates a delta in history.
*
* @param delta Delta.
* @param steps
* @param [options] Options.
*/
goSteps(steps?: number, options?: IGoToOptions): Promise<Response | null>;
/**
* Reloads the current page.
*
* @param [options] Options.
* @returns Response.
*/
reload(options?: IReloadOptions): Promise<Response | null>;
}
//# sourceMappingURL=DetachedBrowserPage.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"DetachedBrowserPage.d.ts","sourceRoot":"","sources":["../../../src/browser/detached-browser/DetachedBrowserPage.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,MAAM,wCAAwC,CAAC;AAC3E,OAAO,oBAAoB,MAAM,2BAA2B,CAAC;AAC7D,OAAO,sBAAsB,MAAM,6BAA6B,CAAC;AAEjE,OAAO,YAAY,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,YAAY,MAAM,0BAA0B,CAAC;AACpD,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAE/C,OAAO,cAAc,MAAM,4BAA4B,CAAC;AAExD,OAAO,4BAA4B,MAAM,0CAA0C,CAAC;AACpF,OAAO,oBAAoB,MAAM,kCAAkC,CAAC;AAGpE;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,mBAAoB,YAAW,YAAY;IAC/D,SAAgB,qBAAqB,wBAA+B;IACpE,SAAgB,SAAS,EAAE,oBAAoB,CAAC;IAChD,SAAgB,OAAO,EAAE,sBAAsB,CAAC;IAChD,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,QAAQ,EAAE,oBAAoB,CAAiD;IAE/F;;;;OAIG;gBACS,OAAO,EAAE,sBAAsB;IAM3C;;OAEG;IACH,IAAW,MAAM,IAAI,oBAAoB,EAAE,CAE1C;IAED;;OAEG;IACH,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED;;;;OAIG;IACH,IAAW,OAAO,CAAC,OAAO,EATJ,MASI,EAEzB;IAED;;;;OAIG;IACH,IAAW,GAAG,IAAI,MAAM,CAEvB;IAED;;;;OAIG;IACH,IAAW,GAAG,CAAC,GAAG,EATA,MASA,EAEjB;IAED;;OAEG;IACI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB7B;;OAEG;IACI,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzC;;OAEG;IACI,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzC;;OAEG;IACI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B;;;;;OAKG;IACI,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG;IAI7C;;;;OAIG;IACI,WAAW,CAAC,QAAQ,EAAE,4BAA4B,GAAG,IAAI;IAYhE;;;;;;OAMG;IACI,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAI1E;;;;OAIG;IACI,MAAM,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAI/D;;;;OAIG;IACI,SAAS,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAIlE;;;;;;OAMG;IACI,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAIhF;;;;;OAKG;IACI,MAAM,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;CAGjE"}

View File

@@ -0,0 +1,169 @@
import VirtualConsolePrinter from '../../console/VirtualConsolePrinter.js';
import DetachedBrowserFrame from './DetachedBrowserFrame.js';
import VirtualConsole from '../../console/VirtualConsole.js';
import BrowserPageUtility from '../utilities/BrowserPageUtility.js';
import DefaultBrowserPageViewport from '../DefaultBrowserPageViewport.js';
import Event from '../../event/Event.js';
/**
* Detached browser page used when constructing a Window instance without a browser.
*/
export default class DetachedBrowserPage {
virtualConsolePrinter = new VirtualConsolePrinter();
mainFrame;
context;
console;
viewport = Object.assign({}, DefaultBrowserPageViewport);
/**
* Constructor.
*
* @param context Browser context.
*/
constructor(context) {
this.context = context;
this.console = context.browser.console ?? new VirtualConsole(this.virtualConsolePrinter);
this.mainFrame = new DetachedBrowserFrame(this);
}
/**
* Returns frames.
*/
get frames() {
return BrowserPageUtility.getFrames(this);
}
/**
* Returns the viewport.
*/
get content() {
return this.mainFrame.content;
}
/**
* Sets the content.
*
* @param content Content.
*/
set content(content) {
this.mainFrame.content = content;
}
/**
* Returns the URL.
*
* @returns URL.
*/
get url() {
return this.mainFrame.url;
}
/**
* Sets the content.
*
* @param url URL.
*/
set url(url) {
this.mainFrame.url = url;
}
/**
* Aborts all ongoing operations and destroys the page.
*/
close() {
// Using Promise instead of async/await to prevent microtask
return new Promise((resolve, reject) => {
const context = this.context;
BrowserPageUtility.closePage(this)
.then(() => {
// As we are in a detached page, a context or browser should not exist without a page as there are no references to them.
if (context.pages[0] === this) {
context.close().then(resolve).catch(reject);
}
else {
resolve();
}
})
.catch(reject);
});
}
/**
* Returns a promise that is resolved when all resources has been loaded, fetch has completed, and all async tasks such as timers are complete.
*/
waitUntilComplete() {
return this.mainFrame.waitUntilComplete();
}
/**
* Returns a promise that is resolved when the page has navigated and the response HTML has been written to the document.
*/
waitForNavigation() {
return this.mainFrame.waitForNavigation();
}
/**
* Aborts all ongoing operations.
*/
abort() {
return this.mainFrame.abort();
}
/**
* Evaluates code or a VM Script in the page's context.
*
* @param script Script.
* @returns Result.
*/
evaluate(script) {
return this.mainFrame.evaluate(script);
}
/**
* Sets the viewport.
*
* @param viewport Viewport.
*/
setViewport(viewport) {
const previousViewport = Object.assign({}, this.viewport);
Object.assign(this.viewport, viewport);
if (previousViewport.width !== this.viewport.width ||
previousViewport.height !== this.viewport.height ||
previousViewport.devicePixelRatio !== this.viewport.devicePixelRatio) {
this.mainFrame.window.dispatchEvent(new Event('resize'));
}
}
/**
* Go to a page.
*
* @param url URL.
* @param [options] Options.
* @returns Response.
*/
goto(url, options) {
return this.mainFrame.goto(url, options);
}
/**
* Navigates back in history.
*
* @param [options] Options.
*/
goBack(options) {
return this.mainFrame.goBack(options);
}
/**
* Navigates forward in history.
*
* @param [options] Options.
*/
goForward(options) {
return this.mainFrame.goForward(options);
}
/**
* Navigates a delta in history.
*
* @param delta Delta.
* @param steps
* @param [options] Options.
*/
goSteps(steps, options) {
return this.mainFrame.goSteps(steps, options);
}
/**
* Reloads the current page.
*
* @param [options] Options.
* @returns Response.
*/
reload(options) {
return this.mainFrame.reload(options);
}
}
//# sourceMappingURL=DetachedBrowserPage.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"DetachedBrowserPage.js","sourceRoot":"","sources":["../../../src/browser/detached-browser/DetachedBrowserPage.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,MAAM,wCAAwC,CAAC;AAC3E,OAAO,oBAAoB,MAAM,2BAA2B,CAAC;AAE7D,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAK7D,OAAO,kBAAkB,MAAM,oCAAoC,CAAC;AAEpE,OAAO,0BAA0B,MAAM,kCAAkC,CAAC;AAG1E,OAAO,KAAK,MAAM,sBAAsB,CAAC;AAEzC;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,mBAAmB;IACvB,qBAAqB,GAAG,IAAI,qBAAqB,EAAE,CAAC;IACpD,SAAS,CAAuB;IAChC,OAAO,CAAyB;IAChC,OAAO,CAAU;IACjB,QAAQ,GAAyB,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,0BAA0B,CAAC,CAAC;IAE/F;;;;OAIG;IACH,YAAY,OAA+B;QAC1C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACzF,IAAI,CAAC,SAAS,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QAChB,OAA+B,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC;IAED;;OAEG;IACH,IAAW,OAAO;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACH,IAAW,OAAO,CAAC,OAAO;QACzB,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACH,IAAW,GAAG;QACb,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACH,IAAW,GAAG,CAAC,GAAG;QACjB,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,GAAG,CAAC;IAC1B,CAAC;IAED;;OAEG;IACI,KAAK;QACX,4DAA4D;QAC5D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC;iBAChC,IAAI,CAAC,GAAG,EAAE;gBACV,yHAAyH;gBACzH,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;oBAC/B,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC7C,CAAC;qBAAM,CAAC;oBACP,OAAO,EAAE,CAAC;gBACX,CAAC;YACF,CAAC,CAAC;iBACD,KAAK,CAAC,MAAM,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,iBAAiB;QACvB,OAAO,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC;IAC3C,CAAC;IAED;;OAEG;IACI,iBAAiB;QACvB,OAAO,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC;IAC3C,CAAC;IAED;;OAEG;IACI,KAAK;QACX,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED;;;;;OAKG;IACI,QAAQ,CAAC,MAAuB;QACtC,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED;;;;OAIG;IACI,WAAW,CAAC,QAAsC;QACxD,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACvC,IACC,gBAAgB,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK;YAC9C,gBAAgB,CAAC,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM;YAChD,gBAAgB,CAAC,gBAAgB,KAAK,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EACnE,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1D,CAAC;IACF,CAAC;IAED;;;;;;OAMG;IACI,IAAI,CAAC,GAAW,EAAE,OAAsB;QAC9C,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,OAAsB;QACnC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED;;;;OAIG;IACI,SAAS,CAAC,OAAsB;QACtC,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;;OAMG;IACI,OAAO,CAAC,KAAc,EAAE,OAAsB;QACpD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,OAAwB;QACrC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;CACD"}

View File

@@ -0,0 +1,10 @@
declare enum BrowserErrorCaptureEnum {
/** Happy DOM use try and catch when evaluating code, but will not be able to catch all errors and Promise rejections. This will decrease performance as using try and catch makes the execution significally slower. This is the default setting. */
tryAndCatch = "tryAndCatch",
/** Happy DOM will add an event listener to the Node.js process to catch all errors and Promise rejections. This will not work in Jest and Vitest as it conflicts with their error listeners. */
processLevel = "processLevel",
/** Error capturing is disabled. Errors and Promise rejections will be thrown. */
disabled = "disabled"
}
export default BrowserErrorCaptureEnum;
//# sourceMappingURL=BrowserErrorCaptureEnum.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"BrowserErrorCaptureEnum.d.ts","sourceRoot":"","sources":["../../../src/browser/enums/BrowserErrorCaptureEnum.ts"],"names":[],"mappings":"AAAA,aAAK,uBAAuB;IAC3B,qPAAqP;IACrP,WAAW,gBAAgB;IAC3B,gMAAgM;IAChM,YAAY,iBAAiB;IAC7B,iFAAiF;IACjF,QAAQ,aAAa;CACrB;AAED,eAAe,uBAAuB,CAAC"}

View File

@@ -0,0 +1,11 @@
var BrowserErrorCaptureEnum;
(function (BrowserErrorCaptureEnum) {
/** Happy DOM use try and catch when evaluating code, but will not be able to catch all errors and Promise rejections. This will decrease performance as using try and catch makes the execution significally slower. This is the default setting. */
BrowserErrorCaptureEnum["tryAndCatch"] = "tryAndCatch";
/** Happy DOM will add an event listener to the Node.js process to catch all errors and Promise rejections. This will not work in Jest and Vitest as it conflicts with their error listeners. */
BrowserErrorCaptureEnum["processLevel"] = "processLevel";
/** Error capturing is disabled. Errors and Promise rejections will be thrown. */
BrowserErrorCaptureEnum["disabled"] = "disabled";
})(BrowserErrorCaptureEnum || (BrowserErrorCaptureEnum = {}));
export default BrowserErrorCaptureEnum;
//# sourceMappingURL=BrowserErrorCaptureEnum.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"BrowserErrorCaptureEnum.js","sourceRoot":"","sources":["../../../src/browser/enums/BrowserErrorCaptureEnum.ts"],"names":[],"mappings":"AAAA,IAAK,uBAOJ;AAPD,WAAK,uBAAuB;IAC3B,qPAAqP;IACrP,sDAA2B,CAAA;IAC3B,gMAAgM;IAChM,wDAA6B,CAAA;IAC7B,iFAAiF;IACjF,gDAAqB,CAAA;AACtB,CAAC,EAPI,uBAAuB,KAAvB,uBAAuB,QAO3B;AAED,eAAe,uBAAuB,CAAC"}

View File

@@ -0,0 +1,10 @@
declare enum BrowserNavigationCrossOriginPolicyEnum {
/** The browser can navigate to any origin. */
anyOrigin = "anyOrigin",
/** The browser can only navigate to the same origin as the current page or its parent. */
sameOrigin = "sameOrigin",
/** The browser can never navigate from a secure protocol (https) to an unsecure protocol (http), but it can always navigate to a secure (https). */
strictOrigin = "strictOrigin"
}
export default BrowserNavigationCrossOriginPolicyEnum;
//# sourceMappingURL=BrowserNavigationCrossOriginPolicyEnum.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"BrowserNavigationCrossOriginPolicyEnum.d.ts","sourceRoot":"","sources":["../../../src/browser/enums/BrowserNavigationCrossOriginPolicyEnum.ts"],"names":[],"mappings":"AAAA,aAAK,sCAAsC;IAC1C,8CAA8C;IAC9C,SAAS,cAAc;IACvB,0FAA0F;IAC1F,UAAU,eAAe;IACzB,oJAAoJ;IACpJ,YAAY,iBAAiB;CAC7B;AAED,eAAe,sCAAsC,CAAC"}

View File

@@ -0,0 +1,11 @@
var BrowserNavigationCrossOriginPolicyEnum;
(function (BrowserNavigationCrossOriginPolicyEnum) {
/** The browser can navigate to any origin. */
BrowserNavigationCrossOriginPolicyEnum["anyOrigin"] = "anyOrigin";
/** The browser can only navigate to the same origin as the current page or its parent. */
BrowserNavigationCrossOriginPolicyEnum["sameOrigin"] = "sameOrigin";
/** The browser can never navigate from a secure protocol (https) to an unsecure protocol (http), but it can always navigate to a secure (https). */
BrowserNavigationCrossOriginPolicyEnum["strictOrigin"] = "strictOrigin";
})(BrowserNavigationCrossOriginPolicyEnum || (BrowserNavigationCrossOriginPolicyEnum = {}));
export default BrowserNavigationCrossOriginPolicyEnum;
//# sourceMappingURL=BrowserNavigationCrossOriginPolicyEnum.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"BrowserNavigationCrossOriginPolicyEnum.js","sourceRoot":"","sources":["../../../src/browser/enums/BrowserNavigationCrossOriginPolicyEnum.ts"],"names":[],"mappings":"AAAA,IAAK,sCAOJ;AAPD,WAAK,sCAAsC;IAC1C,8CAA8C;IAC9C,iEAAuB,CAAA;IACvB,0FAA0F;IAC1F,mEAAyB,CAAA;IACzB,oJAAoJ;IACpJ,uEAA6B,CAAA;AAC9B,CAAC,EAPI,sCAAsC,KAAtC,sCAAsC,QAO1C;AAED,eAAe,sCAAsC,CAAC"}

View File

@@ -0,0 +1,44 @@
import IBrowserContext from './IBrowserContext.js';
import IBrowserPage from './IBrowserPage.js';
import IBrowserSettings from './IBrowserSettings.js';
import * as PropertySymbol from '../../PropertySymbol.js';
import BrowserExceptionObserver from '../utilities/BrowserExceptionObserver.js';
/**
* Browser.
*
* Much of the interface for the browser has been taken from Puppeteer and Playwright, so that the API is familiar.
*/
export default interface IBrowser {
readonly defaultContext: IBrowserContext;
readonly contexts: IBrowserContext[];
readonly settings: IBrowserSettings;
readonly console: Console | null;
readonly [PropertySymbol.exceptionObserver]: BrowserExceptionObserver | null;
/**
* Aborts all ongoing operations and destroys the browser.
*/
close(): void;
/**
* Returns a promise that is resolved when all resources has been loaded, fetch has completed, and all async tasks such as timers are complete.
*
* @returns Promise.
*/
waitUntilComplete(): Promise<void>;
/**
* Aborts all ongoing operations.
*/
abort(): void;
/**
* Creates a new incognito context.
*
* @returns Context.
*/
newIncognitoContext(): IBrowserContext;
/**
* Creates a new page.
*
* @returns Page.
*/
newPage(): IBrowserPage;
}
//# sourceMappingURL=IBrowser.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"IBrowser.d.ts","sourceRoot":"","sources":["../../../src/browser/types/IBrowser.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,sBAAsB,CAAC;AACnD,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAC7C,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,cAAc,MAAM,yBAAyB,CAAC;AAC1D,OAAO,wBAAwB,MAAM,0CAA0C,CAAC;AAEhF;;;;GAIG;AACH,MAAM,CAAC,OAAO,WAAW,QAAQ;IAChC,QAAQ,CAAC,cAAc,EAAE,eAAe,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,eAAe,EAAE,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAE7E;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;IAEd;;;;OAIG;IACH,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;IAEd;;;;OAIG;IACH,mBAAmB,IAAI,eAAe,CAAC;IAEvC;;;;OAIG;IACH,OAAO,IAAI,YAAY,CAAC;CACxB"}

View File

@@ -0,0 +1,2 @@
import * as PropertySymbol from '../../PropertySymbol.js';
//# sourceMappingURL=IBrowser.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"IBrowser.js","sourceRoot":"","sources":["../../../src/browser/types/IBrowser.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,cAAc,MAAM,yBAAyB,CAAC"}

View File

@@ -0,0 +1,36 @@
import ICookieContainer from '../../cookie/ICookieContainer.js';
import IResponseCache from '../../fetch/cache/response/IResponseCache.js';
import IBrowser from './IBrowser.js';
import IBrowserPage from './IBrowserPage.js';
import IPreflightResponseCache from '../../fetch/cache/preflight/IPreflightResponseCache.js';
/**
* Browser context.
*/
export default interface IBrowserContext {
readonly pages: IBrowserPage[];
readonly browser: IBrowser;
readonly cookieContainer: ICookieContainer;
readonly responseCache: IResponseCache;
readonly preflightResponseCache: IPreflightResponseCache;
/**
* Aborts all ongoing operations and destroys the context.
*/
close(): Promise<void>;
/**
* Returns a promise that is resolved when all resources has been loaded, fetch has completed, and all async tasks such as timers are complete.
*
* @returns Promise.
*/
waitUntilComplete(): Promise<void>;
/**
* Aborts all ongoing operations.
*/
abort(): Promise<void>;
/**
* Creates a new page.
*
* @returns Page.
*/
newPage(): IBrowserPage;
}
//# sourceMappingURL=IBrowserContext.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"IBrowserContext.d.ts","sourceRoot":"","sources":["../../../src/browser/types/IBrowserContext.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,kCAAkC,CAAC;AAChE,OAAO,cAAc,MAAM,8CAA8C,CAAC;AAC1E,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAC7C,OAAO,uBAAuB,MAAM,wDAAwD,CAAC;AAE7F;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,eAAe;IACvC,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,gBAAgB,CAAC;IAC3C,QAAQ,CAAC,aAAa,EAAE,cAAc,CAAC;IACvC,QAAQ,CAAC,sBAAsB,EAAE,uBAAuB,CAAC;IAEzD;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;;;OAIG;IACH,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;;;OAIG;IACH,OAAO,IAAI,YAAY,CAAC;CACxB"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=IBrowserContext.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"IBrowserContext.js","sourceRoot":"","sources":["../../../src/browser/types/IBrowserContext.ts"],"names":[],"mappings":""}

View File

@@ -0,0 +1,82 @@
import AsyncTaskManager from '../../async-task-manager/AsyncTaskManager.js';
import * as PropertySymbol from '../../PropertySymbol.js';
import BrowserWindow from '../../window/BrowserWindow.js';
import Document from '../../nodes/document/Document.js';
import IBrowserPage from './IBrowserPage.js';
import Response from '../../fetch/Response.js';
import IGoToOptions from './IGoToOptions.js';
import { Script } from 'vm';
import IReloadOptions from './IReloadOptions.js';
import CrossOriginBrowserWindow from '../../window/CrossOriginBrowserWindow.js';
import IHistoryItem from '../../history/IHistoryItem.js';
/**
* Browser frame.
*/
export default interface IBrowserFrame {
readonly childFrames: IBrowserFrame[];
readonly parentFrame: IBrowserFrame | null;
readonly page: IBrowserPage;
readonly window: BrowserWindow;
readonly document: Document;
content: string;
url: string;
[PropertySymbol.history]: IHistoryItem[];
[PropertySymbol.asyncTaskManager]: AsyncTaskManager;
[PropertySymbol.listeners]: {
navigation: Array<() => void>;
};
[PropertySymbol.openerFrame]: IBrowserFrame | null;
[PropertySymbol.openerWindow]: BrowserWindow | CrossOriginBrowserWindow | null;
[PropertySymbol.popup]: boolean;
/**
* Returns a promise that is resolved when all resources has been loaded, fetch has completed, and all async tasks such as timers are complete.
*/
waitUntilComplete(): Promise<void>;
/**
* Returns a promise that is resolved when the frame has navigated and the response HTML has been written to the document.
*/
waitForNavigation(): Promise<void>;
/**
* Aborts all ongoing operations.
*/
abort(): Promise<void>;
/**
*
* @param script Script.
* @returns Result.
*/
evaluate(script: string | Script): any;
/**
* Go to a page.
*
* @param url URL.
* @param [options] Options.
*/
goto(url: string, options?: IGoToOptions): Promise<Response | null>;
/**
* Navigates back in history.
*
* @param [options] Options.
*/
goBack(options?: IGoToOptions): Promise<Response | null>;
/**
* Navigates forward in history.
*
* @param [options] Options.
*/
goForward(options?: IGoToOptions): Promise<Response | null>;
/**
* Navigates a delta in history.
*
* @param steps Steps.
* @param [options] Options.
*/
goSteps(steps?: number, options?: IGoToOptions): Promise<Response | null>;
/**
* Reloads the current frame.
*
* @param [options] Options.
*/
reload(options: IReloadOptions): Promise<Response | null>;
}
//# sourceMappingURL=IBrowserFrame.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"IBrowserFrame.d.ts","sourceRoot":"","sources":["../../../src/browser/types/IBrowserFrame.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,8CAA8C,CAAC;AAC5E,OAAO,KAAK,cAAc,MAAM,yBAAyB,CAAC;AAC1D,OAAO,aAAa,MAAM,+BAA+B,CAAC;AAC1D,OAAO,QAAQ,MAAM,kCAAkC,CAAC;AACxD,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAC7C,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,cAAc,MAAM,qBAAqB,CAAC;AACjD,OAAO,wBAAwB,MAAM,0CAA0C,CAAC;AAChF,OAAO,YAAY,MAAM,+BAA+B,CAAC;AAEzD;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,aAAa;IACrC,QAAQ,CAAC,WAAW,EAAE,aAAa,EAAE,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,aAAa,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzC,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpD,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;QAAE,UAAU,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAA;KAAE,CAAC;IAC9D,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACnD,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,aAAa,GAAG,wBAAwB,GAAG,IAAI,CAAC;IAC/E,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhC;;OAEG;IACH,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC;;OAEG;IACH,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;IAEvC;;;;;OAKG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAEpE;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAEzD;;;;OAIG;IACH,SAAS,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAE5D;;;;;OAKG;IACH,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAE1E;;;;OAIG;IACH,MAAM,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;CAC1D"}

View File

@@ -0,0 +1,2 @@
import * as PropertySymbol from '../../PropertySymbol.js';
//# sourceMappingURL=IBrowserFrame.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"IBrowserFrame.js","sourceRoot":"","sources":["../../../src/browser/types/IBrowserFrame.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,cAAc,MAAM,yBAAyB,CAAC"}

View File

@@ -0,0 +1,82 @@
import IBrowserPageViewport from '../types/IBrowserPageViewport.js';
import VirtualConsolePrinter from '../../console/VirtualConsolePrinter.js';
import IBrowserFrame from './IBrowserFrame.js';
import IBrowserContext from './IBrowserContext.js';
import { Script } from 'vm';
import IGoToOptions from './IGoToOptions.js';
import Response from '../../fetch/Response.js';
import IReloadOptions from './IReloadOptions.js';
import IOptionalBrowserPageViewport from './IOptionalBrowserPageViewport.js';
/**
* Browser page.
*/
export default interface IBrowserPage {
readonly virtualConsolePrinter: VirtualConsolePrinter;
readonly mainFrame: IBrowserFrame;
readonly context: IBrowserContext;
readonly console: Console;
readonly frames: IBrowserFrame[];
readonly viewport: IBrowserPageViewport;
content: string;
url: string;
/**
* Aborts all ongoing operations and destroys the page.
*/
close(): Promise<void>;
/**
* Returns a promise that is resolved when all resources has been loaded, fetch has completed, and all async tasks such as timers are complete.
*/
waitUntilComplete(): Promise<void>;
/**
* Returns a promise that is resolved when the page has navigated and the response HTML has been written to the document.
*/
waitForNavigation(): Promise<void>;
/**
* Aborts all ongoing operations.
*/
abort(): Promise<void>;
/**
* Evaluates code or a VM Script in the page's context.
*/
evaluate(script: string | Script): any;
/**
* Sets the viewport.
*
* @param viewport Viewport.
*/
setViewport(viewport: IOptionalBrowserPageViewport): void;
/**
* Go to a page.
*
* @param url URL.
* @param [options] Options.
*/
goto(url: string, options?: IGoToOptions): Promise<Response | null>;
/**
* Navigates back in history.
*
* @param [options] Options.
*/
goBack(options?: IGoToOptions): Promise<Response | null>;
/**
* Navigates forward in history.
*
* @param [options] Options.
*/
goForward(options?: IGoToOptions): Promise<Response | null>;
/**
* Navigates a delta in history.
*
* @param steps Steps.
* @param [options] Options.
*/
goSteps(steps?: number, options?: IGoToOptions): Promise<Response | null>;
/**
* Reloads the current page.
*
* @param [options] Options.
* @returns Response.
*/
reload(options?: IReloadOptions): Promise<Response | null>;
}
//# sourceMappingURL=IBrowserPage.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"IBrowserPage.d.ts","sourceRoot":"","sources":["../../../src/browser/types/IBrowserPage.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,MAAM,kCAAkC,CAAC;AACpE,OAAO,qBAAqB,MAAM,wCAAwC,CAAC;AAC3E,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,eAAe,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAC7C,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,cAAc,MAAM,qBAAqB,CAAC;AACjD,OAAO,4BAA4B,MAAM,mCAAmC,CAAC;AAE7E;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,YAAY;IACpC,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IACtD,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;OAEG;IACH,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC;;OAEG;IACH,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;IAEvC;;;;OAIG;IACH,WAAW,CAAC,QAAQ,EAAE,4BAA4B,GAAG,IAAI,CAAC;IAE1D;;;;;OAKG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAEpE;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAEzD;;;;OAIG;IACH,SAAS,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAE5D;;;;;OAKG;IACH,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAE1E;;;;;OAKG;IACH,MAAM,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;CAC3D"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=IBrowserPage.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"IBrowserPage.js","sourceRoot":"","sources":["../../../src/browser/types/IBrowserPage.ts"],"names":[],"mappings":""}

View File

@@ -0,0 +1,6 @@
export default interface IBrowserPageViewport {
width: number;
height: number;
devicePixelRatio: number;
}
//# sourceMappingURL=IBrowserPageViewport.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"IBrowserPageViewport.d.ts","sourceRoot":"","sources":["../../../src/browser/types/IBrowserPageViewport.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,WAAW,oBAAoB;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;CACzB"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=IBrowserPageViewport.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"IBrowserPageViewport.js","sourceRoot":"","sources":["../../../src/browser/types/IBrowserPageViewport.ts"],"names":[],"mappings":""}

View File

@@ -0,0 +1,109 @@
import BrowserErrorCaptureEnum from '../enums/BrowserErrorCaptureEnum.js';
import BrowserNavigationCrossOriginPolicyEnum from '../enums/BrowserNavigationCrossOriginPolicyEnum.js';
import IFetchInterceptor from '../../fetch/types/IFetchInterceptor.js';
import IVirtualServer from '../../fetch/types/IVirtualServer.js';
/**
* Browser settings.
*/
export default interface IBrowserSettings {
/** Disables JavaScript evaluation. */
disableJavaScriptEvaluation: boolean;
/** Disables JavaScript file loading. */
disableJavaScriptFileLoading: boolean;
/** Disables CSS file loading. */
disableCSSFileLoading: boolean;
/** Disables computed style rendering. */
disableComputedStyleRendering: boolean;
/** Handle disabled resource loading as success */
handleDisabledFileLoadingAsSuccess: boolean;
/**
* Settings for timers
*/
timer: {
maxTimeout: number;
maxIntervalTime: number;
maxIntervalIterations: number;
preventTimerLoops: boolean;
};
/**
* Settings for fetch
*/
fetch: {
/**
* Disables same-origin policy (CORS)
*
* @see https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy
*/
disableSameOriginPolicy: boolean;
/**
* Disables validation of certificates against the list of supplied CAs.
*
* Disabling this feature makes it possible to use self-signed certificates or certificates that are not signed by a trusted CA.
*/
disableStrictSSL: boolean;
/**
* Fetch interceptor.
*/
interceptor: IFetchInterceptor | null;
/**
* Virtual servers used for simulating a server that reads from the file system.
*/
virtualServers: IVirtualServer[] | null;
};
/**
* Disables error capturing.
*
* @deprecated Use errorCapture instead.
*/
disableErrorCapturing: boolean;
/**
* Error capturing policy.
*/
errorCapture: BrowserErrorCaptureEnum;
/**
* @deprecated Not something that browsers support anymore as it is not secure.
*/
enableFileSystemHttpRequests: boolean;
/**
* @deprecated Use navigation.disableChildFrameNavigation instead.
*/
disableIframePageLoading: boolean;
/**
* Settings for the browser's navigation (when following links or opening windows).
*/
navigation: {
/** Disables navigation to other pages in the main frame or a page. */
disableMainFrameNavigation: boolean;
/** Disables navigation to other pages in child frames (such as iframes). */
disableChildFrameNavigation: boolean;
/** Disables navigation to other pages in child pages (such as popup windows). */
disableChildPageNavigation: boolean;
/** Disables the fallback to setting the URL when navigating to a page is disabled or when inside a detached browser frame. */
disableFallbackToSetURL: boolean;
/** Sets the policy for cross-origin navigation. */
crossOriginPolicy: BrowserNavigationCrossOriginPolicyEnum;
};
/**
* Settings for the browser's navigator.
*/
navigator: {
userAgent: string;
maxTouchPoints: number;
};
/**
* Settings for the browser's device.
*/
device: {
prefersColorScheme: string;
prefersReducedMotion: string;
mediaType: string;
forcedColors: string;
};
/**
* Debug settings.
*/
debug: {
traceWaitUntilComplete: number;
};
}
//# sourceMappingURL=IBrowserSettings.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"IBrowserSettings.d.ts","sourceRoot":"","sources":["../../../src/browser/types/IBrowserSettings.ts"],"names":[],"mappings":"AAAA,OAAO,uBAAuB,MAAM,qCAAqC,CAAC;AAC1E,OAAO,sCAAsC,MAAM,oDAAoD,CAAC;AACxG,OAAO,iBAAiB,MAAM,wCAAwC,CAAC;AACvE,OAAO,cAAc,MAAM,qCAAqC,CAAC;AAEjE;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,gBAAgB;IACxC,sCAAsC;IACtC,2BAA2B,EAAE,OAAO,CAAC;IAErC,wCAAwC;IACxC,4BAA4B,EAAE,OAAO,CAAC;IAEtC,iCAAiC;IACjC,qBAAqB,EAAE,OAAO,CAAC;IAE/B,yCAAyC;IACzC,6BAA6B,EAAE,OAAO,CAAC;IAEvC,kDAAkD;IAClD,kCAAkC,EAAE,OAAO,CAAC;IAE5C;;OAEG;IACH,KAAK,EAAE;QACN,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,EAAE,MAAM,CAAC;QACxB,qBAAqB,EAAE,MAAM,CAAC;QAC9B,iBAAiB,EAAE,OAAO,CAAC;KAC3B,CAAC;IAEF;;OAEG;IACH,KAAK,EAAE;QACN;;;;WAIG;QACH,uBAAuB,EAAE,OAAO,CAAC;QAEjC;;;;WAIG;QACH,gBAAgB,EAAE,OAAO,CAAC;QAE1B;;WAEG;QACH,WAAW,EAAE,iBAAiB,GAAG,IAAI,CAAC;QAEtC;;WAEG;QACH,cAAc,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;KACxC,CAAC;IAEF;;;;OAIG;IACH,qBAAqB,EAAE,OAAO,CAAC;IAE/B;;OAEG;IACH,YAAY,EAAE,uBAAuB,CAAC;IAEtC;;OAEG;IACH,4BAA4B,EAAE,OAAO,CAAC;IAEtC;;OAEG;IACH,wBAAwB,EAAE,OAAO,CAAC;IAElC;;OAEG;IACH,UAAU,EAAE;QACX,sEAAsE;QACtE,0BAA0B,EAAE,OAAO,CAAC;QAEpC,4EAA4E;QAC5E,2BAA2B,EAAE,OAAO,CAAC;QAErC,iFAAiF;QACjF,0BAA0B,EAAE,OAAO,CAAC;QAEpC,8HAA8H;QAC9H,uBAAuB,EAAE,OAAO,CAAC;QAEjC,mDAAmD;QACnD,iBAAiB,EAAE,sCAAsC,CAAC;KAC1D,CAAC;IAEF;;OAEG;IACH,SAAS,EAAE;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;KACvB,CAAC;IAEF;;OAEG;IACH,MAAM,EAAE;QACP,kBAAkB,EAAE,MAAM,CAAC;QAC3B,oBAAoB,EAAE,MAAM,CAAC;QAC7B,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;KACrB,CAAC;IAEF;;OAEG;IACH,KAAK,EAAE;QACN,sBAAsB,EAAE,MAAM,CAAC;KAC/B,CAAC;CACF"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=IBrowserSettings.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"IBrowserSettings.js","sourceRoot":"","sources":["../../../src/browser/types/IBrowserSettings.ts"],"names":[],"mappings":""}

View File

@@ -0,0 +1,16 @@
import IRequestReferrerPolicy from '../../fetch/types/IRequestReferrerPolicy.js';
import IReloadOptions from './IReloadOptions.js';
/**
* Go to options.
*/
export default interface IGoToOptions extends IReloadOptions {
/**
* Referrer.
*/
referrer?: string;
/**
* Referrer policy.
*/
referrerPolicy?: IRequestReferrerPolicy;
}
//# sourceMappingURL=IGoToOptions.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"IGoToOptions.d.ts","sourceRoot":"","sources":["../../../src/browser/types/IGoToOptions.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,MAAM,6CAA6C,CAAC;AACjF,OAAO,cAAc,MAAM,qBAAqB,CAAC;AAEjD;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,YAAa,SAAQ,cAAc;IAC3D;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,cAAc,CAAC,EAAE,sBAAsB,CAAC;CACxC"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=IGoToOptions.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"IGoToOptions.js","sourceRoot":"","sources":["../../../src/browser/types/IGoToOptions.ts"],"names":[],"mappings":""}

View File

@@ -0,0 +1,6 @@
export default interface IOptionalBrowserPageViewport {
width?: number;
height?: number;
devicePixelRatio?: number;
}
//# sourceMappingURL=IOptionalBrowserPageViewport.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"IOptionalBrowserPageViewport.d.ts","sourceRoot":"","sources":["../../../src/browser/types/IOptionalBrowserPageViewport.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,WAAW,4BAA4B;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC1B"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=IOptionalBrowserPageViewport.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"IOptionalBrowserPageViewport.js","sourceRoot":"","sources":["../../../src/browser/types/IOptionalBrowserPageViewport.ts"],"names":[],"mappings":""}

View File

@@ -0,0 +1,103 @@
import BrowserErrorCaptureEnum from '../enums/BrowserErrorCaptureEnum.js';
import BrowserNavigationCrossOriginPolicyEnum from '../enums/BrowserNavigationCrossOriginPolicyEnum.js';
import IFetchInterceptor from '../../fetch/types/IFetchInterceptor.js';
import IVirtualServer from '../../fetch/types/IVirtualServer.js';
export default interface IOptionalBrowserSettings {
/** Disables JavaScript evaluation. */
disableJavaScriptEvaluation?: boolean;
/** Disables JavaScript file loading. */
disableJavaScriptFileLoading?: boolean;
/** Disables CSS file loading. */
disableCSSFileLoading?: boolean;
/** Disables computed style rendering. */
disableComputedStyleRendering?: boolean;
/** Handle disabled file loading as success */
handleDisabledFileLoadingAsSuccess?: boolean;
/** Settings for timers */
timer?: {
maxTimeout?: number;
maxIntervalTime?: number;
maxIntervalIterations?: number;
};
/**
* Settings for fetch
*/
fetch?: {
/**
* Disables same-origin policy (CORS)
*
* @see https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy
*/
disableSameOriginPolicy?: boolean;
/**
* Disables validation of certificates against the list of supplied CAs.
*
* Disabling this feature makes it possible to use self-signed certificates or certificates that are not signed by a trusted CA.
*/
disableStrictSSL?: boolean;
/**
* Fetch interceptor.
*/
interceptor?: IFetchInterceptor | null;
/**
* Virtual servers used for simulating a server that reads from the file system.
*/
virtualServers?: IVirtualServer[] | null;
};
/**
* Disables error capturing.
*
* @deprecated Use errorCapture instead.
*/
disableErrorCapturing?: boolean;
/**
* Error capturing policy.
*/
errorCapture?: BrowserErrorCaptureEnum;
/**
* @deprecated Not something that browsers support anymore as it is not secure.
*/
enableFileSystemHttpRequests?: boolean;
/**
* @deprecated Use navigation.disableChildFrameNavigation instead.
*/
disableIframePageLoading?: boolean;
/**
* Settings for the browser's navigation (when following links or opening windows).
*/
navigation?: {
/** Disables navigation to other pages in the main frame or a page. */
disableMainFrameNavigation?: boolean;
/** Disables navigation to other pages in child frames (such as iframes). */
disableChildFrameNavigation?: boolean;
/** Disables navigation to other pages in child pages (such as popup windows). */
disableChildPageNavigation?: boolean;
/** Disables the fallback to setting the URL when navigating to a page is disabled or when inside a detached browser frame. */
disableFallbackToSetURL?: boolean;
/** Sets the policy for cross-origin navigation. */
crossOriginPolicy?: BrowserNavigationCrossOriginPolicyEnum;
};
/**
* Settings for the browser's navigator.
*/
navigator?: {
userAgent?: string;
maxTouchPoints?: number;
};
/**
* Settings for the browser's device.
*/
device?: {
prefersColorScheme?: string;
prefersReducedMotion?: string;
mediaType?: string;
forcedColors?: string;
};
/**
* Debug settings.
*/
debug?: {
traceWaitUntilComplete?: number;
};
}
//# sourceMappingURL=IOptionalBrowserSettings.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"IOptionalBrowserSettings.d.ts","sourceRoot":"","sources":["../../../src/browser/types/IOptionalBrowserSettings.ts"],"names":[],"mappings":"AAAA,OAAO,uBAAuB,MAAM,qCAAqC,CAAC;AAC1E,OAAO,sCAAsC,MAAM,oDAAoD,CAAC;AACxG,OAAO,iBAAiB,MAAM,wCAAwC,CAAC;AACvE,OAAO,cAAc,MAAM,qCAAqC,CAAC;AAEjE,MAAM,CAAC,OAAO,WAAW,wBAAwB;IAChD,sCAAsC;IACtC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IAEtC,wCAAwC;IACxC,4BAA4B,CAAC,EAAE,OAAO,CAAC;IAEvC,iCAAiC;IACjC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC,yCAAyC;IACzC,6BAA6B,CAAC,EAAE,OAAO,CAAC;IAExC,8CAA8C;IAC9C,kCAAkC,CAAC,EAAE,OAAO,CAAC;IAE7C,0BAA0B;IAC1B,KAAK,CAAC,EAAE;QACP,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,qBAAqB,CAAC,EAAE,MAAM,CAAC;KAC/B,CAAC;IAEF;;OAEG;IACH,KAAK,CAAC,EAAE;QACP;;;;WAIG;QACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;QAElC;;;;WAIG;QACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAE3B;;WAEG;QACH,WAAW,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;QAEvC;;WAEG;QACH,cAAc,CAAC,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;KACzC,CAAC;IAEF;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC;;OAEG;IACH,YAAY,CAAC,EAAE,uBAAuB,CAAC;IAEvC;;OAEG;IACH,4BAA4B,CAAC,EAAE,OAAO,CAAC;IAEvC;;OAEG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAEnC;;OAEG;IACH,UAAU,CAAC,EAAE;QACZ,sEAAsE;QACtE,0BAA0B,CAAC,EAAE,OAAO,CAAC;QAErC,4EAA4E;QAC5E,2BAA2B,CAAC,EAAE,OAAO,CAAC;QAEtC,iFAAiF;QACjF,0BAA0B,CAAC,EAAE,OAAO,CAAC;QAErC,8HAA8H;QAC9H,uBAAuB,CAAC,EAAE,OAAO,CAAC;QAElC,mDAAmD;QACnD,iBAAiB,CAAC,EAAE,sCAAsC,CAAC;KAC3D,CAAC;IAEF;;OAEG;IACH,SAAS,CAAC,EAAE;QACX,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,cAAc,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IAEF;;OAEG;IACH,MAAM,CAAC,EAAE;QACR,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IAEF;;OAEG;IACH,KAAK,CAAC,EAAE;QACP,sBAAsB,CAAC,EAAE,MAAM,CAAC;KAChC,CAAC;CACF"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=IOptionalBrowserSettings.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"IOptionalBrowserSettings.js","sourceRoot":"","sources":["../../../src/browser/types/IOptionalBrowserSettings.ts"],"names":[],"mappings":""}

View File

@@ -0,0 +1,14 @@
/**
* Reload options.
*/
export default interface IReloadOptions {
/**
* Set to true to bypass the cache.
*/
hard?: boolean;
/**
* Timeout in ms. Default is 30000ms.
*/
timeout?: number;
}
//# sourceMappingURL=IReloadOptions.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"IReloadOptions.d.ts","sourceRoot":"","sources":["../../../src/browser/types/IReloadOptions.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,cAAc;IACtC;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=IReloadOptions.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"IReloadOptions.js","sourceRoot":"","sources":["../../../src/browser/types/IReloadOptions.ts"],"names":[],"mappings":""}

View File

@@ -0,0 +1,23 @@
import BrowserWindow from '../../window/BrowserWindow.js';
/**
* Listens for uncaught exceptions coming from Happy DOM on the running Node process and dispatches error events on the Window instance.
*/
export default class BrowserExceptionObserver {
private static listenerCount;
private observedWindows;
private uncaughtExceptionListener;
private uncaughtRejectionListener;
/**
* Observes the Node process for uncaught exceptions.
*
* @param window Browser window.
*/
observe(window: BrowserWindow): void;
/**
* Disconnects observer.
*
* @param window Browser window.
*/
disconnect(window: BrowserWindow): void;
}
//# sourceMappingURL=BrowserExceptionObserver.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"BrowserExceptionObserver.d.ts","sourceRoot":"","sources":["../../../src/browser/utilities/BrowserExceptionObserver.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,+BAA+B,CAAC;AAE1D;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,wBAAwB;IAC5C,OAAO,CAAC,MAAM,CAAC,aAAa,CAAK;IACjC,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,yBAAyB,CAElB;IACf,OAAO,CAAC,yBAAyB,CAAyC;IAE1E;;;;OAIG;IACI,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAmF3C;;;;OAIG;IACI,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;CAmB9C"}

View File

@@ -0,0 +1,99 @@
/**
* Listens for uncaught exceptions coming from Happy DOM on the running Node process and dispatches error events on the Window instance.
*/
export default class BrowserExceptionObserver {
static listenerCount = 0;
observedWindows = [];
uncaughtExceptionListener = null;
uncaughtRejectionListener = null;
/**
* Observes the Node process for uncaught exceptions.
*
* @param window Browser window.
*/
observe(window) {
if (this.observedWindows.includes(window)) {
throw new Error('Browser window is already being observed.');
}
this.observedWindows.push(window);
if (this.uncaughtExceptionListener) {
return;
}
this.uncaughtExceptionListener = (error, origin) => {
if (origin === 'unhandledRejection') {
return;
}
let targetWindow = null;
for (const window of this.observedWindows) {
if (error instanceof window.Error || error instanceof window.DOMException) {
targetWindow = window;
break;
}
}
if (targetWindow) {
targetWindow.console.error(error);
targetWindow.dispatchEvent(new targetWindow.ErrorEvent('error', {
error: error,
message: error.message
}));
}
else if (process.listenerCount('uncaughtException') ===
this.constructor.listenerCount) {
// eslint-disable-next-line no-console
console.error(error);
// Exit if there are no other listeners handling the error.
process.exit(1);
}
};
// The "uncaughtException" event is not always triggered for unhandled rejections.
// Therefore we want to use the "unhandledRejection" event as well.
this.uncaughtRejectionListener = (error) => {
let targetWindow = null;
for (const window of this.observedWindows) {
if (error instanceof window.Error || error instanceof window.DOMException) {
targetWindow = window;
break;
}
}
if (targetWindow) {
targetWindow.console.error(error);
targetWindow.dispatchEvent(new targetWindow.ErrorEvent('error', {
error: error,
message: error.message
}));
}
else if (process.listenerCount('unhandledRejection') ===
this.constructor.listenerCount) {
// eslint-disable-next-line no-console
console.error(error);
// Exit if there are no other listeners handling the error.
process.exit(1);
}
};
this.constructor.listenerCount++;
process.on('uncaughtException', this.uncaughtExceptionListener);
process.on('unhandledRejection', this.uncaughtRejectionListener);
}
/**
* Disconnects observer.
*
* @param window Browser window.
*/
disconnect(window) {
const index = this.observedWindows.indexOf(window);
if (index === -1) {
return;
}
this.observedWindows.splice(index, 1);
if (this.observedWindows.length === 0 && this.uncaughtExceptionListener) {
this.constructor.listenerCount--;
process.off('uncaughtException', this.uncaughtExceptionListener);
if (this.uncaughtRejectionListener) {
process.off('unhandledRejection', this.uncaughtRejectionListener);
}
this.uncaughtExceptionListener = null;
this.uncaughtRejectionListener = null;
}
}
}
//# sourceMappingURL=BrowserExceptionObserver.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"BrowserExceptionObserver.js","sourceRoot":"","sources":["../../../src/browser/utilities/BrowserExceptionObserver.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,20 @@
import IBrowserFrame from '../types/IBrowserFrame.js';
/**
* Browser frame factory.
*/
export default class BrowserFrameFactory {
/**
* Creates a new frame.
*
* @param parentFrame Parent frame.
* @returns Frame.
*/
static createChildFrame(parentFrame: IBrowserFrame): IBrowserFrame;
/**
* Aborts all ongoing operations and destroys the frame.
*
* @param frame Frame.
*/
static destroyFrame(frame: IBrowserFrame): Promise<void>;
}
//# sourceMappingURL=BrowserFrameFactory.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"BrowserFrameFactory.d.ts","sourceRoot":"","sources":["../../../src/browser/utilities/BrowserFrameFactory.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,2BAA2B,CAAC;AAKtD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,mBAAmB;IACvC;;;;;OAKG;WACW,gBAAgB,CAAC,WAAW,EAAE,aAAa,GAAG,aAAa;IASzE;;;;OAIG;WACW,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CA+D/D"}

View File

@@ -0,0 +1,79 @@
import * as PropertySymbol from '../../PropertySymbol.js';
/**
* Browser frame factory.
*/
export default class BrowserFrameFactory {
/**
* Creates a new frame.
*
* @param parentFrame Parent frame.
* @returns Frame.
*/
static createChildFrame(parentFrame) {
const frame = new parentFrame.constructor(parentFrame.page);
frame.parentFrame = parentFrame;
parentFrame.childFrames.push(frame);
return frame;
}
/**
* Aborts all ongoing operations and destroys the frame.
*
* @param frame Frame.
*/
static destroyFrame(frame) {
const exceptionObserver = frame.page?.context?.browser?.[PropertySymbol.exceptionObserver];
// Using Promise instead of async/await to prevent usage of a microtask
return new Promise((resolve, reject) => {
if (!frame.window) {
resolve();
return;
}
if (frame.parentFrame) {
const index = frame.parentFrame.childFrames.indexOf(frame);
if (index !== -1) {
frame.parentFrame.childFrames.splice(index, 1);
}
}
if (!frame.childFrames.length) {
frame[PropertySymbol.asyncTaskManager]
.destroy()
.then(() => {
if (exceptionObserver && frame.window) {
exceptionObserver.disconnect(frame.window);
}
frame.page = null;
frame.window = null;
frame[PropertySymbol.openerFrame] = null;
frame[PropertySymbol.openerWindow] = null;
resolve();
})
.catch((error) => reject(error));
if (frame.window) {
frame.window[PropertySymbol.destroy]();
}
return;
}
Promise.all(frame.childFrames.slice().map((childFrame) => this.destroyFrame(childFrame)))
.then(() => {
frame[PropertySymbol.asyncTaskManager]
.destroy()
.then(() => {
if (exceptionObserver && frame.window) {
exceptionObserver.disconnect(frame.window);
}
frame.page = null;
frame.window = null;
frame[PropertySymbol.openerFrame] = null;
frame[PropertySymbol.openerWindow] = null;
resolve();
})
.catch((error) => reject(error));
if (frame.window) {
frame.window[PropertySymbol.destroy]();
}
})
.catch((error) => reject(error));
});
}
}
//# sourceMappingURL=BrowserFrameFactory.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"BrowserFrameFactory.js","sourceRoot":"","sources":["../../../src/browser/utilities/BrowserFrameFactory.ts"],"names":[],"mappings":"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"}

Some files were not shown because too many files have changed in this diff Show More