@tstdl/base 0.83.27 → 0.84.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/application/application.d.ts +1 -1
  2. package/application/application.js +4 -4
  3. package/browser/browser-context-controller.d.ts +32 -0
  4. package/browser/browser-context-controller.js +88 -0
  5. package/browser/browser-controller.d.ts +45 -0
  6. package/browser/browser-controller.js +109 -0
  7. package/browser/browser.service.d.ts +34 -0
  8. package/browser/browser.service.js +107 -0
  9. package/browser/index.d.ts +4 -0
  10. package/browser/index.js +21 -0
  11. package/browser/page-controller.d.ts +54 -0
  12. package/browser/page-controller.js +166 -0
  13. package/browser/pdf-options.d.ts +36 -0
  14. package/browser/pdf-options.js +138 -0
  15. package/browser/utils.d.ts +6 -0
  16. package/browser/utils.js +60 -0
  17. package/core.d.ts +1 -1
  18. package/data-structures/cache.d.ts +11 -0
  19. package/data-structures/cache.js +69 -0
  20. package/data-structures/index.d.ts +1 -0
  21. package/data-structures/index.js +1 -0
  22. package/disposable/async-disposer.d.ts +2 -1
  23. package/error/index.d.ts +1 -0
  24. package/error/index.js +1 -0
  25. package/error/timeout.error.d.ts +5 -0
  26. package/error/timeout.error.js +30 -0
  27. package/examples/browser/basic.d.ts +1 -0
  28. package/examples/browser/basic.js +19 -0
  29. package/examples/mail/basic.js +11 -3
  30. package/examples/pdf/basic.js +33 -7
  31. package/examples/pdf/templates/hello-name.js +10 -2
  32. package/http/client/http-client-request.js +1 -1
  33. package/http/server/node/node-http-server.js +1 -1
  34. package/lock/web/web-lock.js +2 -2
  35. package/package.json +6 -6
  36. package/pdf/pdf.service.d.ts +23 -58
  37. package/pdf/pdf.service.js +33 -203
  38. package/pool/pool.d.ts +1 -0
  39. package/pool/pool.js +6 -0
  40. package/queue/mongo/queue.js +2 -2
  41. package/types.d.ts +3 -0
  42. package/utils/cancellation-token.d.ts +11 -16
  43. package/utils/cancellation-token.js +10 -39
  44. package/utils/index.d.ts +1 -0
  45. package/utils/index.js +1 -0
  46. package/utils/stream/finalize-stream.d.ts +22 -1
  47. package/utils/stream/finalize-stream.js +14 -4
  48. package/utils/stream/readable-stream-from-promise.d.ts +2 -1
  49. package/utils/stream/readable-stream-from-promise.js +3 -2
  50. package/utils/timing.d.ts +7 -1
  51. package/utils/timing.js +23 -3
  52. package/utils/type-guards.d.ts +6 -0
  53. package/utils/type-guards.js +26 -0
  54. package/utils/value-or-provider.d.ts +2 -0
  55. package/utils/value-or-provider.js +30 -0
@@ -11,7 +11,7 @@ export declare class Application {
11
11
  private readonly moduleInstances;
12
12
  private readonly shutdownPromise;
13
13
  private readonly _shutdownToken;
14
- readonly shutdownToken: ReadonlyCancellationToken;
14
+ get shutdownToken(): ReadonlyCancellationToken;
15
15
  static get shutdownToken(): ReadonlyCancellationToken;
16
16
  constructor(logger: Logger);
17
17
  static registerModule(moduleType: Type<Module>): void;
@@ -24,8 +24,8 @@ module.exports = __toCommonJS(application_exports);
24
24
  var import_container = require("../container/index.js");
25
25
  var import_core = require("../core.js");
26
26
  var import_logger = require("../logger/index.js");
27
- var import_module = require("../module/module.js");
28
27
  var import_module_base = require("../module/module-base.js");
28
+ var import_module = require("../module/module.js");
29
29
  var import_function_module = require("../module/modules/function.module.js");
30
30
  var import_process_shutdown = require("../process-shutdown.js");
31
31
  var import_deferred_promise = require("../promise/deferred-promise.js");
@@ -59,7 +59,6 @@ let Application = Application_1 = class Application2 {
59
59
  if ((0, import_type_guards.isUndefined)(this._instance)) {
60
60
  this._instance = import_container.container.resolve(Application_1);
61
61
  this._instance._shutdownToken = import_process_shutdown.shutdownToken;
62
- this._instance.shutdownToken = import_process_shutdown.shutdownToken.asReadonly;
63
62
  }
64
63
  return this._instance;
65
64
  }
@@ -68,7 +67,9 @@ let Application = Application_1 = class Application2 {
68
67
  moduleInstances;
69
68
  shutdownPromise;
70
69
  _shutdownToken;
71
- shutdownToken;
70
+ get shutdownToken() {
71
+ return this._shutdownToken.asReadonly();
72
+ }
72
73
  static get shutdownToken() {
73
74
  return Application_1.instance.shutdownToken;
74
75
  }
@@ -78,7 +79,6 @@ let Application = Application_1 = class Application2 {
78
79
  this.moduleInstances = /* @__PURE__ */ new Set();
79
80
  this.shutdownPromise = new import_deferred_promise.DeferredPromise();
80
81
  this._shutdownToken = import_process_shutdown.shutdownToken.createChild();
81
- this.shutdownToken = this._shutdownToken.asReadonly;
82
82
  }
83
83
  static registerModule(moduleType) {
84
84
  Application_1.instance.registerModule(moduleType);
@@ -0,0 +1,32 @@
1
+ import type { BrowserContext } from 'playwright';
2
+ import type { Injectable } from '../container/interfaces.js';
3
+ import { resolveArgumentType } from '../container/interfaces.js';
4
+ import type { AsyncDisposable } from '../disposable/disposable.js';
5
+ import { disposeAsync } from '../disposable/disposable.js';
6
+ import type { Json } from '../types.js';
7
+ import type { Opaque } from 'type-fest';
8
+ import type { NewBrowserContextOptions } from './browser-controller.js';
9
+ import type { PageControllerOptions } from './page-controller.js';
10
+ import { PageController } from './page-controller.js';
11
+ export type BrowserContextControllerOptions = {
12
+ defaultNewPageOptions?: NewPageOptions;
13
+ };
14
+ export type NewPageOptions = {
15
+ extraHttpHeaders?: Record<string, string>;
16
+ controllerOptions?: PageControllerOptions;
17
+ };
18
+ export type BrowserContextState = Opaque<Json, 'BrowserContextState'>;
19
+ export type BrowserContextControllerArgument = NewBrowserContextOptions;
20
+ export declare class BrowserContextController implements AsyncDisposable, Injectable<BrowserContextControllerArgument> {
21
+ private readonly options;
22
+ /** @deprecated should be avoided */
23
+ readonly context: BrowserContext;
24
+ readonly [resolveArgumentType]: BrowserContextControllerArgument;
25
+ constructor(context: BrowserContext, options?: BrowserContextControllerOptions);
26
+ [disposeAsync](): Promise<void>;
27
+ close(): Promise<void>;
28
+ getState(): Promise<BrowserContextState>;
29
+ setExtraHttpHeaders(headers: Record<string, string>): Promise<void>;
30
+ newPage(options?: NewPageOptions): Promise<PageController>;
31
+ waitForClose(): Promise<void>;
32
+ }
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var browser_context_controller_exports = {};
20
+ __export(browser_context_controller_exports, {
21
+ BrowserContextController: () => BrowserContextController
22
+ });
23
+ module.exports = __toCommonJS(browser_context_controller_exports);
24
+ var import_decorators = require("../container/decorators.js");
25
+ var import_interfaces = require("../container/interfaces.js");
26
+ var import_disposable = require("../disposable/disposable.js");
27
+ var import_type_guards = require("../utils/type-guards.js");
28
+ var import_browser_controller = require("./browser-controller.js");
29
+ var import_page_controller = require("./page-controller.js");
30
+ var __decorate = function(decorators, target, key, desc) {
31
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
32
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
33
+ r = Reflect.decorate(decorators, target, key, desc);
34
+ else
35
+ for (var i = decorators.length - 1; i >= 0; i--)
36
+ if (d = decorators[i])
37
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
38
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
39
+ };
40
+ var __metadata = function(k, v) {
41
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
42
+ return Reflect.metadata(k, v);
43
+ };
44
+ let BrowserContextController = class BrowserContextController2 {
45
+ options;
46
+ /** @deprecated should be avoided */
47
+ context;
48
+ constructor(context, options = {}) {
49
+ this.context = context;
50
+ this.options = options;
51
+ }
52
+ async [import_disposable.disposeAsync]() {
53
+ await this.close();
54
+ }
55
+ async close() {
56
+ await this.context.close();
57
+ }
58
+ async getState() {
59
+ const state = await this.context.storageState();
60
+ return state;
61
+ }
62
+ async setExtraHttpHeaders(headers) {
63
+ await this.context.setExtraHTTPHeaders(headers);
64
+ }
65
+ async newPage(options) {
66
+ const page = await this.context.newPage();
67
+ const mergedOptions = { ...this.options.defaultNewPageOptions, ...options };
68
+ const controller = new import_page_controller.PageController(page, mergedOptions.controllerOptions);
69
+ if ((0, import_type_guards.isDefined)(mergedOptions.extraHttpHeaders)) {
70
+ await controller.setExtraHttpHeaders(mergedOptions.extraHttpHeaders);
71
+ }
72
+ return controller;
73
+ }
74
+ async waitForClose() {
75
+ return new Promise((resolve) => this.context.once("close", () => resolve()));
76
+ }
77
+ };
78
+ BrowserContextController = __decorate([
79
+ (0, import_decorators.injectable)({
80
+ provider: {
81
+ useFactory: async (argument, context) => {
82
+ const browserController = await context.resolveAsync(import_browser_controller.BrowserController);
83
+ return browserController.newContext(argument);
84
+ }
85
+ }
86
+ }),
87
+ __metadata("design:paramtypes", [Object, Object])
88
+ ], BrowserContextController);
@@ -0,0 +1,45 @@
1
+ import type { Browser } from 'playwright';
2
+ import type { Injectable } from '../container/interfaces.js';
3
+ import { resolveArgumentType } from '../container/interfaces.js';
4
+ import type { AsyncDisposable } from '../disposable/disposable.js';
5
+ import { disposeAsync } from '../disposable/disposable.js';
6
+ import type { BrowserContextControllerOptions, BrowserContextState, NewPageOptions } from './browser-context-controller.js';
7
+ import { BrowserContextController } from './browser-context-controller.js';
8
+ import type { NewBrowserOptions } from './browser.service.js';
9
+ import type { PageController } from './page-controller.js';
10
+ export type BrowserControllerOptions = {
11
+ defaultNewContextOptions?: NewBrowserContextOptions;
12
+ };
13
+ export type NewBrowserContextOptions = {
14
+ state?: BrowserContextState;
15
+ locale?: string;
16
+ extraHttpHeaders?: Record<string, string>;
17
+ controllerOptions?: BrowserContextControllerOptions;
18
+ viewport?: {
19
+ width: number;
20
+ height: number;
21
+ } | null;
22
+ proxy?: {
23
+ server: string;
24
+ bypass?: string;
25
+ username?: string;
26
+ password?: string;
27
+ };
28
+ };
29
+ export type BrowserControllerArgument = NewBrowserOptions;
30
+ export declare class BrowserController implements AsyncDisposable, Injectable<BrowserControllerArgument> {
31
+ /** @deprecated should be avoided */
32
+ readonly browser: Browser;
33
+ readonly options: BrowserControllerOptions | undefined;
34
+ readonly [resolveArgumentType]: BrowserControllerArgument;
35
+ constructor(browser: Browser, options?: BrowserControllerOptions);
36
+ [disposeAsync](): Promise<void>;
37
+ newContext(options?: NewBrowserContextOptions): Promise<BrowserContextController>;
38
+ /**
39
+ * Creates a new context and a new page. Context is automatically closed on page close.
40
+ * Only use for isolated or "use once" scenarios, otherwise all the contexts are more expensive than using a single context.
41
+ */
42
+ newPage(options?: NewBrowserContextOptions & NewPageOptions): Promise<PageController>;
43
+ close(): Promise<void>;
44
+ waitForClose(): Promise<void>;
45
+ }
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var browser_controller_exports = {};
20
+ __export(browser_controller_exports, {
21
+ BrowserController: () => BrowserController
22
+ });
23
+ module.exports = __toCommonJS(browser_controller_exports);
24
+ var import_decorators = require("../container/decorators.js");
25
+ var import_interfaces = require("../container/interfaces.js");
26
+ var import_disposable = require("../disposable/disposable.js");
27
+ var import_browser_context_controller = require("./browser-context-controller.js");
28
+ var import_browser_service = require("./browser.service.js");
29
+ var import_utils = require("./utils.js");
30
+ var __decorate = function(decorators, target, key, desc) {
31
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
32
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
33
+ r = Reflect.decorate(decorators, target, key, desc);
34
+ else
35
+ for (var i = decorators.length - 1; i >= 0; i--)
36
+ if (d = decorators[i])
37
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
38
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
39
+ };
40
+ var __metadata = function(k, v) {
41
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
42
+ return Reflect.metadata(k, v);
43
+ };
44
+ let BrowserController = class BrowserController2 {
45
+ /** @deprecated should be avoided */
46
+ browser;
47
+ options;
48
+ constructor(browser, options) {
49
+ this.browser = browser;
50
+ this.options = options;
51
+ }
52
+ async [import_disposable.disposeAsync]() {
53
+ await this.close();
54
+ }
55
+ async newContext(options) {
56
+ const mergedOptions = (0, import_utils.mergeNewBrowserContextOptions)(this.options?.defaultNewContextOptions, options);
57
+ const context = await this.browser.newContext({
58
+ storageState: mergedOptions.state,
59
+ locale: mergedOptions.locale,
60
+ viewport: mergedOptions.viewport,
61
+ proxy: mergedOptions.proxy,
62
+ extraHTTPHeaders: mergedOptions.extraHttpHeaders
63
+ });
64
+ return new import_browser_context_controller.BrowserContextController(context, mergedOptions.controllerOptions);
65
+ }
66
+ /**
67
+ * Creates a new context and a new page. Context is automatically closed on page close.
68
+ * Only use for isolated or "use once" scenarios, otherwise all the contexts are more expensive than using a single context.
69
+ */
70
+ async newPage(options) {
71
+ const context = await this.newContext(options);
72
+ try {
73
+ const page = await context.newPage(options);
74
+ page.ownedContext = context;
75
+ return page;
76
+ } catch (error) {
77
+ await context.close();
78
+ throw error;
79
+ }
80
+ }
81
+ async close() {
82
+ if (this.browser.isConnected()) {
83
+ for (const context of this.browser.contexts()) {
84
+ await context.close();
85
+ }
86
+ await this.browser.close();
87
+ }
88
+ }
89
+ async waitForClose() {
90
+ return new Promise((resolve) => {
91
+ if (!this.browser.isConnected()) {
92
+ resolve();
93
+ } else {
94
+ this.browser.once("disconnected", () => resolve());
95
+ }
96
+ });
97
+ }
98
+ };
99
+ BrowserController = __decorate([
100
+ (0, import_decorators.injectable)({
101
+ provider: {
102
+ useFactory: async (argument, context) => {
103
+ const browserService = await context.resolveAsync(import_browser_service.BrowserService);
104
+ return browserService.newBrowser(argument);
105
+ }
106
+ }
107
+ }),
108
+ __metadata("design:paramtypes", [Object, Object])
109
+ ], BrowserController);
@@ -0,0 +1,34 @@
1
+ import type { Injectable } from '../container/interfaces.js';
2
+ import { afterResolve, resolveArgumentType } from '../container/interfaces.js';
3
+ import type { AsyncDisposable } from '../disposable/disposable.js';
4
+ import { disposeAsync } from '../disposable/disposable.js';
5
+ import { BrowserContextController } from './browser-context-controller.js';
6
+ import type { BrowserControllerOptions, NewBrowserContextOptions } from './browser-controller.js';
7
+ import { BrowserController } from './browser-controller.js';
8
+ export declare class BrowserServiceOptions {
9
+ defaultNewBrowserOptions?: NewBrowserOptions;
10
+ }
11
+ export type BrowserServiceArgument = BrowserServiceOptions;
12
+ export type NewBrowserOptions = {
13
+ browser?: 'chromium' | 'firefox' | 'webkit';
14
+ headless?: boolean;
15
+ windowSize?: {
16
+ width: number;
17
+ height: number;
18
+ };
19
+ /** @deprecated should be avoided */
20
+ browserArguments?: string[];
21
+ controllerOptions?: BrowserControllerOptions;
22
+ };
23
+ export declare class BrowserService implements AsyncDisposable, Injectable<BrowserServiceArgument> {
24
+ private readonly browsers;
25
+ private readonly persistentBrowserContexts;
26
+ readonly options: BrowserServiceOptions | undefined;
27
+ readonly [resolveArgumentType]: BrowserServiceArgument;
28
+ constructor(options?: BrowserServiceOptions);
29
+ [afterResolve](): void;
30
+ [disposeAsync](): Promise<void>;
31
+ newBrowser(options?: NewBrowserOptions): Promise<BrowserController>;
32
+ newPersistentContext(dataDirectory: string, browserOptions?: NewBrowserOptions, contextOptions?: NewBrowserContextOptions): Promise<BrowserContextController>;
33
+ dispose(): Promise<void>;
34
+ }
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var browser_service_exports = {};
20
+ __export(browser_service_exports, {
21
+ BrowserService: () => BrowserService,
22
+ BrowserServiceOptions: () => BrowserServiceOptions
23
+ });
24
+ module.exports = __toCommonJS(browser_service_exports);
25
+ var import_decorators = require("../container/decorators.js");
26
+ var import_interfaces = require("../container/interfaces.js");
27
+ var import_core = require("../core.js");
28
+ var import_disposable = require("../disposable/disposable.js");
29
+ var import_browser_context_controller = require("./browser-context-controller.js");
30
+ var import_browser_controller = require("./browser-controller.js");
31
+ var import_utils = require("./utils.js");
32
+ var __decorate = function(decorators, target, key, desc) {
33
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
34
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
35
+ r = Reflect.decorate(decorators, target, key, desc);
36
+ else
37
+ for (var i = decorators.length - 1; i >= 0; i--)
38
+ if (d = decorators[i])
39
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
40
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
41
+ };
42
+ var __metadata = function(k, v) {
43
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
44
+ return Reflect.metadata(k, v);
45
+ };
46
+ var __param = function(paramIndex, decorator) {
47
+ return function(target, key) {
48
+ decorator(target, key, paramIndex);
49
+ };
50
+ };
51
+ class BrowserServiceOptions {
52
+ defaultNewBrowserOptions;
53
+ }
54
+ let BrowserService = class BrowserService2 {
55
+ browsers;
56
+ persistentBrowserContexts;
57
+ options;
58
+ constructor(options) {
59
+ this.options = options;
60
+ this.browsers = /* @__PURE__ */ new Set();
61
+ this.persistentBrowserContexts = /* @__PURE__ */ new Set();
62
+ }
63
+ [import_interfaces.afterResolve]() {
64
+ import_core.disposer.add(this);
65
+ }
66
+ async [import_disposable.disposeAsync]() {
67
+ return this.dispose();
68
+ }
69
+ async newBrowser(options = {}) {
70
+ const mergedOptions = { ...this.options?.defaultNewBrowserOptions, ...options };
71
+ const launchOptions = (0, import_utils.getLaunchOptions)(mergedOptions);
72
+ const browser = await (0, import_utils.getBrowserType)(mergedOptions.browser).launch(launchOptions);
73
+ this.browsers.add(browser);
74
+ browser.once("disconnected", () => this.browsers.delete(browser));
75
+ return new import_browser_controller.BrowserController(browser, mergedOptions.controllerOptions);
76
+ }
77
+ async newPersistentContext(dataDirectory, browserOptions = {}, contextOptions = {}) {
78
+ const mergedBrowserOptions = { ...this.options?.defaultNewBrowserOptions, ...browserOptions };
79
+ const mergedContextOptions = (0, import_utils.mergeNewBrowserContextOptions)(this.options?.defaultNewBrowserOptions?.controllerOptions?.defaultNewContextOptions, browserOptions.controllerOptions?.defaultNewContextOptions, contextOptions);
80
+ const launchOptions = (0, import_utils.getLaunchOptions)(mergedBrowserOptions);
81
+ const context = await (0, import_utils.getBrowserType)(mergedBrowserOptions.browser).launchPersistentContext(dataDirectory, {
82
+ ...launchOptions,
83
+ locale: mergedContextOptions.locale,
84
+ viewport: mergedContextOptions.viewport,
85
+ proxy: mergedContextOptions.proxy,
86
+ extraHTTPHeaders: mergedContextOptions.extraHttpHeaders
87
+ });
88
+ this.persistentBrowserContexts.add(context);
89
+ context.once("close", () => this.persistentBrowserContexts.delete(context));
90
+ return new import_browser_context_controller.BrowserContextController(context, mergedBrowserOptions.controllerOptions?.defaultNewContextOptions?.controllerOptions);
91
+ }
92
+ async dispose() {
93
+ for (const browser of this.browsers) {
94
+ if (browser.isConnected()) {
95
+ await browser.close();
96
+ }
97
+ }
98
+ for (const context of this.persistentBrowserContexts) {
99
+ await context.close();
100
+ }
101
+ }
102
+ };
103
+ BrowserService = __decorate([
104
+ (0, import_decorators.singleton)(),
105
+ __param(0, (0, import_decorators.injectArg)()),
106
+ __metadata("design:paramtypes", [BrowserServiceOptions])
107
+ ], BrowserService);
@@ -0,0 +1,4 @@
1
+ export * from './browser-context-controller.js';
2
+ export * from './browser-controller.js';
3
+ export * from './browser.service.js';
4
+ export * from './page-controller.js';
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
15
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
16
+ var browser_exports = {};
17
+ module.exports = __toCommonJS(browser_exports);
18
+ __reExport(browser_exports, require("./browser-context-controller.js"), module.exports);
19
+ __reExport(browser_exports, require("./browser-controller.js"), module.exports);
20
+ __reExport(browser_exports, require("./browser.service.js"), module.exports);
21
+ __reExport(browser_exports, require("./page-controller.js"), module.exports);
@@ -0,0 +1,54 @@
1
+ import type { Page } from 'playwright';
2
+ import type { AsyncDisposable } from '../disposable/disposable.js';
3
+ import { disposeAsync } from '../disposable/disposable.js';
4
+ import type { BrowserContextController } from './browser-context-controller.js';
5
+ import type { PdfRenderOptions } from './pdf-options.js';
6
+ export type Delay = number | DelayProvider;
7
+ export type DelayProvider = () => number;
8
+ export type PageControllerOptions = {
9
+ actionDelay?: Delay;
10
+ typeDelay?: Delay;
11
+ };
12
+ export type WaitOptions = {
13
+ timeout?: number;
14
+ };
15
+ export type LoadState = 'load' | 'domcontentloaded' | 'networkidle';
16
+ export type WaitForStateOptions = {
17
+ waitUntil: LoadState;
18
+ };
19
+ export type DelayOptions = {
20
+ delay?: Delay;
21
+ };
22
+ export type Abortable = {
23
+ abort?: AbortSignal;
24
+ };
25
+ /** @deprecated for internal use only */
26
+ export type PageControllerInternal = {
27
+ ownedContext?: BrowserContextController;
28
+ };
29
+ export declare class PageController implements AsyncDisposable {
30
+ private readonly ownedContext?;
31
+ /** @deprecated should be avoided */
32
+ readonly page: Page;
33
+ readonly options: PageControllerOptions;
34
+ constructor(page: Page, options?: PageControllerOptions);
35
+ [disposeAsync](): Promise<void>;
36
+ close(): Promise<void>;
37
+ setContent(html: string, options?: WaitOptions & WaitForStateOptions): Promise<void>;
38
+ setExtraHttpHeaders(headers: Record<string, string>): Promise<void>;
39
+ navigate(url: string, options?: WaitOptions & WaitForStateOptions): Promise<void>;
40
+ waitForClose(): Promise<void>;
41
+ waitForState(state: LoadState, options?: WaitOptions): Promise<void>;
42
+ waitForNetworkIdle(options?: WaitOptions): Promise<void>;
43
+ waitForUrl(urlOrPredicate: string | RegExp | ((url: URL) => boolean), options?: WaitOptions): Promise<void>;
44
+ waitForFrame(selector: string, options?: WaitOptions): Promise<PageController>;
45
+ fill(selector: string, text: string, options?: DelayOptions & WaitOptions): Promise<void>;
46
+ type(selector: string, text: string, options?: DelayOptions & WaitOptions): Promise<void>;
47
+ selectOption(selector: string, value: string | string[], options?: WaitOptions): Promise<void>;
48
+ click(selector: string, options?: WaitOptions): Promise<void>;
49
+ getValue(selector: string, options?: WaitOptions): Promise<string>;
50
+ waitForElement(selector: string, options?: WaitOptions): Promise<void>;
51
+ renderPdf(options?: PdfRenderOptions & Abortable): Promise<Uint8Array>;
52
+ renderPdfStream(options?: PdfRenderOptions & Abortable): ReadableStream<Uint8Array>;
53
+ private prepareAction;
54
+ }