@agent-infra/browser 0.1.6 → 0.2.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -52
- package/README.zh-CN.md +57 -0
- package/dist/actions/index.d.ts +3 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/index.js +46 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/actions/index.mjs +7 -0
- package/dist/actions/key-map.d.ts +28 -0
- package/dist/actions/key-map.d.ts.map +1 -0
- package/dist/actions/key-map.js +409 -0
- package/dist/actions/key-map.js.map +1 -0
- package/dist/actions/key-map.mjs +369 -0
- package/dist/actions/key-map.mjs.map +1 -0
- package/dist/actions/keyboard.d.ts +21 -0
- package/dist/actions/keyboard.d.ts.map +1 -0
- package/dist/actions/keyboard.js +196 -0
- package/dist/actions/keyboard.js.map +1 -0
- package/dist/actions/keyboard.mjs +152 -0
- package/dist/actions/keyboard.mjs.map +1 -0
- package/dist/actions/keyboard.test.d.ts +2 -0
- package/dist/actions/keyboard.test.d.ts.map +1 -0
- package/dist/actions/mouse.d.ts +19 -0
- package/dist/actions/mouse.d.ts.map +1 -0
- package/dist/actions/mouse.js +173 -0
- package/dist/actions/mouse.js.map +1 -0
- package/dist/actions/mouse.mjs +136 -0
- package/dist/actions/mouse.mjs.map +1 -0
- package/dist/browser/base.d.ts +47 -0
- package/dist/browser/base.d.ts.map +1 -0
- package/dist/browser/base.js +156 -0
- package/dist/browser/base.js.map +1 -0
- package/dist/browser/base.mjs +122 -0
- package/dist/browser/base.mjs.map +1 -0
- package/dist/browser/browser.d.ts +23 -0
- package/dist/browser/browser.d.ts.map +1 -0
- package/dist/browser/browser.js +183 -0
- package/dist/browser/browser.js.map +1 -0
- package/dist/browser/browser.mjs +149 -0
- package/dist/browser/browser.mjs.map +1 -0
- package/dist/env.d.ts +4 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +96 -0
- package/dist/env.js.map +1 -0
- package/dist/env.mjs +62 -0
- package/dist/env.mjs.map +1 -0
- package/dist/index.node.d.ts +7 -0
- package/dist/index.node.d.ts.map +1 -0
- package/dist/index.node.js +106 -0
- package/dist/index.node.js.map +1 -0
- package/dist/index.node.mjs +10 -0
- package/dist/index.web.d.ts +7 -0
- package/dist/index.web.d.ts.map +1 -0
- package/dist/{index.js → index.web.js} +33 -20
- package/dist/index.web.js.map +1 -0
- package/dist/index.web.mjs +10 -0
- package/dist/injected-script/index.d.ts +3 -0
- package/dist/injected-script/index.d.ts.map +1 -0
- package/dist/injected-script/index.js +46 -0
- package/dist/injected-script/index.js.map +1 -0
- package/dist/injected-script/index.mjs +7 -0
- package/dist/injected-script/visibility.d.ts +2 -0
- package/dist/injected-script/visibility.d.ts.map +1 -0
- package/dist/injected-script/visibility.js +66 -0
- package/dist/injected-script/visibility.js.map +1 -0
- package/dist/injected-script/visibility.mjs +32 -0
- package/dist/injected-script/visibility.mjs.map +1 -0
- package/dist/injected-script/webdriver.d.ts +2 -0
- package/dist/injected-script/webdriver.d.ts.map +1 -0
- package/dist/injected-script/webdriver.js +71 -0
- package/dist/injected-script/webdriver.js.map +1 -0
- package/dist/injected-script/webdriver.mjs +37 -0
- package/dist/injected-script/webdriver.mjs.map +1 -0
- package/dist/polyfills/index.d.ts +2 -0
- package/dist/polyfills/index.d.ts.map +1 -0
- package/dist/polyfills/index.js +66 -0
- package/dist/polyfills/index.js.map +1 -0
- package/dist/polyfills/index.mjs +5 -0
- package/dist/polyfills/withResolvers.d.ts +2 -0
- package/dist/polyfills/withResolvers.d.ts.map +1 -0
- package/dist/polyfills/withResolvers.js +37 -0
- package/dist/polyfills/withResolvers.js.map +1 -0
- package/dist/polyfills/withResolvers.mjs +19 -0
- package/dist/polyfills/withResolvers.mjs.map +1 -0
- package/dist/tabs/dialog.d.ts +14 -0
- package/dist/tabs/dialog.d.ts.map +1 -0
- package/dist/tabs/dialog.js +175 -0
- package/dist/tabs/dialog.js.map +1 -0
- package/dist/tabs/dialog.mjs +141 -0
- package/dist/tabs/dialog.mjs.map +1 -0
- package/dist/tabs/index.d.ts +3 -0
- package/dist/tabs/index.d.ts.map +1 -0
- package/dist/tabs/index.js +46 -0
- package/dist/tabs/index.js.map +1 -0
- package/dist/tabs/index.mjs +7 -0
- package/dist/tabs/tab.d.ts +50 -0
- package/dist/tabs/tab.d.ts.map +1 -0
- package/dist/tabs/tab.js +579 -0
- package/dist/tabs/tab.js.map +1 -0
- package/dist/tabs/tab.mjs +545 -0
- package/dist/tabs/tab.mjs.map +1 -0
- package/dist/tabs/tabs.d.ts +21 -0
- package/dist/tabs/tabs.d.ts.map +1 -0
- package/dist/tabs/tabs.js +458 -0
- package/dist/tabs/tabs.js.map +1 -0
- package/dist/tabs/tabs.mjs +424 -0
- package/dist/tabs/tabs.mjs.map +1 -0
- package/dist/types/actions.d.ts +26 -0
- package/dist/types/actions.d.ts.map +1 -0
- package/dist/types/actions.js +24 -0
- package/dist/types/actions.js.map +1 -0
- package/dist/types/browser.d.ts +7 -0
- package/dist/types/browser.d.ts.map +1 -0
- package/dist/types/browser.js +24 -0
- package/dist/types/browser.js.map +1 -0
- package/dist/types/browser.mjs +4 -0
- package/dist/types/dialog.d.ts +7 -0
- package/dist/types/dialog.d.ts.map +1 -0
- package/dist/types/dialog.js +24 -0
- package/dist/types/dialog.js.map +1 -0
- package/dist/types/dialog.mjs +4 -0
- package/dist/types/env.d.ts +8 -0
- package/dist/types/env.d.ts.map +1 -0
- package/dist/{types.js → types/env.js} +1 -1
- package/dist/types/env.js.map +1 -0
- package/dist/types/env.mjs +4 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +102 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/index.mjs +9 -0
- package/dist/types/tabs.d.ts +98 -0
- package/dist/types/tabs.d.ts.map +1 -0
- package/dist/types/tabs.js +48 -0
- package/dist/types/tabs.js.map +1 -0
- package/dist/types/tabs.mjs +14 -0
- package/dist/types/tabs.mjs.map +1 -0
- package/dist/utils/iife.d.ts +2 -0
- package/dist/utils/iife.d.ts.map +1 -0
- package/dist/utils/iife.js +48 -0
- package/dist/utils/iife.js.map +1 -0
- package/dist/utils/iife.mjs +14 -0
- package/dist/utils/iife.mjs.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +50 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/index.mjs +8 -0
- package/dist/utils/mutex.d.ts +21 -0
- package/dist/utils/mutex.d.ts.map +1 -0
- package/dist/utils/mutex.js +133 -0
- package/dist/utils/mutex.js.map +1 -0
- package/dist/utils/mutex.mjs +99 -0
- package/dist/utils/mutex.mjs.map +1 -0
- package/dist/utils/url.d.ts +7 -0
- package/dist/utils/url.d.ts.map +1 -0
- package/dist/utils/url.js +76 -0
- package/dist/utils/url.js.map +1 -0
- package/dist/utils/url.mjs +42 -0
- package/dist/utils/url.mjs.map +1 -0
- package/package.json +21 -13
- package/dist/base-browser.d.ts +0 -94
- package/dist/base-browser.d.ts.map +0 -1
- package/dist/base-browser.js +0 -189
- package/dist/base-browser.js.map +0 -1
- package/dist/base-browser.mjs +0 -155
- package/dist/base-browser.mjs.map +0 -1
- package/dist/index.d.ts +0 -15
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -8
- package/dist/local-browser.d.ts +0 -19
- package/dist/local-browser.d.ts.map +0 -1
- package/dist/local-browser.js +0 -134
- package/dist/local-browser.js.map +0 -1
- package/dist/local-browser.mjs +0 -100
- package/dist/local-browser.mjs.map +0 -1
- package/dist/remote-browser.d.ts +0 -49
- package/dist/remote-browser.d.ts.map +0 -1
- package/dist/remote-browser.js +0 -89
- package/dist/remote-browser.js.map +0 -1
- package/dist/remote-browser.mjs +0 -55
- package/dist/remote-browser.mjs.map +0 -1
- package/dist/types.d.ts +0 -158
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- /package/dist/{types.mjs → types/actions.mjs} +0 -0
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Bytedance, Inc. and its affiliates.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
"use strict";
|
|
6
|
+
var __webpack_require__ = {};
|
|
7
|
+
(()=>{
|
|
8
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
9
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
get: definition[key]
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
})();
|
|
15
|
+
(()=>{
|
|
16
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
17
|
+
})();
|
|
18
|
+
(()=>{
|
|
19
|
+
__webpack_require__.r = (exports1)=>{
|
|
20
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
21
|
+
value: 'Module'
|
|
22
|
+
});
|
|
23
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
24
|
+
value: true
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
})();
|
|
28
|
+
var __webpack_exports__ = {};
|
|
29
|
+
__webpack_require__.r(__webpack_exports__);
|
|
30
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
31
|
+
Tabs: ()=>Tabs
|
|
32
|
+
});
|
|
33
|
+
const external_valtio_namespaceObject = require("valtio");
|
|
34
|
+
const utils_namespaceObject = require("valtio/utils");
|
|
35
|
+
const external_tab_js_namespaceObject = require("./tab.js");
|
|
36
|
+
const index_js_namespaceObject = require("../utils/index.js");
|
|
37
|
+
const tabs_js_namespaceObject = require("../types/tabs.js");
|
|
38
|
+
function _check_private_redeclaration(obj, privateCollection) {
|
|
39
|
+
if (privateCollection.has(obj)) throw new TypeError("Cannot initialize the same private elements twice on an object");
|
|
40
|
+
}
|
|
41
|
+
function _class_apply_descriptor_get(receiver, descriptor) {
|
|
42
|
+
if (descriptor.get) return descriptor.get.call(receiver);
|
|
43
|
+
return descriptor.value;
|
|
44
|
+
}
|
|
45
|
+
function _class_apply_descriptor_set(receiver, descriptor, value) {
|
|
46
|
+
if (descriptor.set) descriptor.set.call(receiver, value);
|
|
47
|
+
else {
|
|
48
|
+
if (!descriptor.writable) throw new TypeError("attempted to set read only private field");
|
|
49
|
+
descriptor.value = value;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function _class_extract_field_descriptor(receiver, privateMap, action) {
|
|
53
|
+
if (!privateMap.has(receiver)) throw new TypeError("attempted to " + action + " private field on non-instance");
|
|
54
|
+
return privateMap.get(receiver);
|
|
55
|
+
}
|
|
56
|
+
function _class_private_field_get(receiver, privateMap) {
|
|
57
|
+
var descriptor = _class_extract_field_descriptor(receiver, privateMap, "get");
|
|
58
|
+
return _class_apply_descriptor_get(receiver, descriptor);
|
|
59
|
+
}
|
|
60
|
+
function _class_private_field_init(obj, privateMap, value) {
|
|
61
|
+
_check_private_redeclaration(obj, privateMap);
|
|
62
|
+
privateMap.set(obj, value);
|
|
63
|
+
}
|
|
64
|
+
function _class_private_field_set(receiver, privateMap, value) {
|
|
65
|
+
var descriptor = _class_extract_field_descriptor(receiver, privateMap, "set");
|
|
66
|
+
_class_apply_descriptor_set(receiver, descriptor, value);
|
|
67
|
+
return value;
|
|
68
|
+
}
|
|
69
|
+
function _class_private_method_get(receiver, privateSet, fn) {
|
|
70
|
+
if (!privateSet.has(receiver)) throw new TypeError("attempted to get private field on non-instance");
|
|
71
|
+
return fn;
|
|
72
|
+
}
|
|
73
|
+
function _class_private_method_init(obj, privateSet) {
|
|
74
|
+
_check_private_redeclaration(obj, privateSet);
|
|
75
|
+
privateSet.add(obj);
|
|
76
|
+
}
|
|
77
|
+
function _define_property(obj, key, value) {
|
|
78
|
+
if (key in obj) Object.defineProperty(obj, key, {
|
|
79
|
+
value: value,
|
|
80
|
+
enumerable: true,
|
|
81
|
+
configurable: true,
|
|
82
|
+
writable: true
|
|
83
|
+
});
|
|
84
|
+
else obj[key] = value;
|
|
85
|
+
return obj;
|
|
86
|
+
}
|
|
87
|
+
function _ts_add_disposable_resource(env, value, async) {
|
|
88
|
+
if (null != value) {
|
|
89
|
+
if ("object" != typeof value && "function" != typeof value) throw new TypeError("Object expected.");
|
|
90
|
+
var dispose, inner;
|
|
91
|
+
if (async) {
|
|
92
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
93
|
+
dispose = value[Symbol.asyncDispose];
|
|
94
|
+
}
|
|
95
|
+
if (void 0 === dispose) {
|
|
96
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
97
|
+
dispose = value[Symbol.dispose];
|
|
98
|
+
if (async) inner = dispose;
|
|
99
|
+
}
|
|
100
|
+
if ("function" != typeof dispose) throw new TypeError("Object not disposable.");
|
|
101
|
+
if (inner) dispose = function() {
|
|
102
|
+
try {
|
|
103
|
+
inner.call(this);
|
|
104
|
+
} catch (e) {
|
|
105
|
+
return Promise.reject(e);
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
env.stack.push({
|
|
109
|
+
value: value,
|
|
110
|
+
dispose: dispose,
|
|
111
|
+
async: async
|
|
112
|
+
});
|
|
113
|
+
} else if (async) env.stack.push({
|
|
114
|
+
async: true
|
|
115
|
+
});
|
|
116
|
+
return value;
|
|
117
|
+
}
|
|
118
|
+
function tabs_ts_dispose_resources(env) {
|
|
119
|
+
var _SuppressedError = "function" == typeof SuppressedError ? SuppressedError : function(error, suppressed, message) {
|
|
120
|
+
var e = new Error(message);
|
|
121
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
122
|
+
};
|
|
123
|
+
return (tabs_ts_dispose_resources = function(env) {
|
|
124
|
+
function fail(e) {
|
|
125
|
+
env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
|
|
126
|
+
env.hasError = true;
|
|
127
|
+
}
|
|
128
|
+
var r, s = 0;
|
|
129
|
+
function next() {
|
|
130
|
+
while(r = env.stack.pop())try {
|
|
131
|
+
if (!r.async && 1 === s) return s = 0, env.stack.push(r), Promise.resolve().then(next);
|
|
132
|
+
if (r.dispose) {
|
|
133
|
+
var result = r.dispose.call(r.value);
|
|
134
|
+
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {
|
|
135
|
+
fail(e);
|
|
136
|
+
return next();
|
|
137
|
+
});
|
|
138
|
+
} else s |= 1;
|
|
139
|
+
} catch (e) {
|
|
140
|
+
fail(e);
|
|
141
|
+
}
|
|
142
|
+
if (1 === s) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
|
|
143
|
+
if (env.hasError) throw env.error;
|
|
144
|
+
}
|
|
145
|
+
return next();
|
|
146
|
+
})(env);
|
|
147
|
+
}
|
|
148
|
+
var _pptrBrowser = /*#__PURE__*/ new WeakMap(), _tabs = /*#__PURE__*/ new WeakMap(), _options = /*#__PURE__*/ new WeakMap(), _operations = /*#__PURE__*/ new WeakMap(), _isIntentionalDestroy = /*#__PURE__*/ new WeakMap(), _cteateMutex = /*#__PURE__*/ new WeakMap(), _createTab = /*#__PURE__*/ new WeakSet(), _handleTargetCreated = /*#__PURE__*/ new WeakSet(), _activeMutex = /*#__PURE__*/ new WeakMap(), _activeTab = /*#__PURE__*/ new WeakSet(), _closeMutex = /*#__PURE__*/ new WeakMap(), _closeTab = /*#__PURE__*/ new WeakSet(), _handleTargetDestroyed = /*#__PURE__*/ new WeakSet(), _syncTabMeta = /*#__PURE__*/ new WeakSet(), _updateTabDialog = /*#__PURE__*/ new WeakSet(), _setupTabEvents = /*#__PURE__*/ new WeakSet();
|
|
149
|
+
class Tabs {
|
|
150
|
+
static async create(browser, options) {
|
|
151
|
+
const tabs = new Tabs(browser, options);
|
|
152
|
+
await tabs.initializeExistingTabs();
|
|
153
|
+
return tabs;
|
|
154
|
+
}
|
|
155
|
+
subscribe(callback) {
|
|
156
|
+
return (0, external_valtio_namespaceObject.subscribe)(this.state, callback);
|
|
157
|
+
}
|
|
158
|
+
getSnapshot() {
|
|
159
|
+
return {
|
|
160
|
+
tabs: new Map(this.state.tabs),
|
|
161
|
+
activeTabId: this.state.activeTabId
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
createTabInstance(page, options) {
|
|
165
|
+
return new external_tab_js_namespaceObject.Tab(page, options);
|
|
166
|
+
}
|
|
167
|
+
async initializeExistingTabs() {
|
|
168
|
+
var _initedTabs_find;
|
|
169
|
+
const existingPages = await _class_private_field_get(this, _pptrBrowser).pages();
|
|
170
|
+
if (0 === existingPages.length) return;
|
|
171
|
+
const initTabTasks = existingPages.filter((pptrPage)=>!(0, index_js_namespaceObject.validateNavigationUrl)(pptrPage.url()).ignored).map(async (pptrPage)=>{
|
|
172
|
+
const tabId = pptrPage.target()._targetId;
|
|
173
|
+
const tab = this.createTabInstance(pptrPage, {
|
|
174
|
+
tabId: tabId,
|
|
175
|
+
..._class_private_field_get(this, _options)
|
|
176
|
+
});
|
|
177
|
+
_class_private_field_get(this, _tabs).set(tabId, tab);
|
|
178
|
+
_class_private_method_get(this, _setupTabEvents, setupTabEvents).call(this, tab, tabId);
|
|
179
|
+
await _class_private_method_get(this, _syncTabMeta, syncTabMeta).call(this, tabId);
|
|
180
|
+
const isActive = await tab._checkActiveStatusWithRuntime();
|
|
181
|
+
return {
|
|
182
|
+
tabId,
|
|
183
|
+
pptrPage,
|
|
184
|
+
isActive
|
|
185
|
+
};
|
|
186
|
+
});
|
|
187
|
+
const initedTabs = await Promise.all(initTabTasks);
|
|
188
|
+
let activeTabId = null == (_initedTabs_find = initedTabs.find((result)=>result.isActive)) ? void 0 : _initedTabs_find.tabId;
|
|
189
|
+
if (!activeTabId) activeTabId = initedTabs[0].tabId;
|
|
190
|
+
await _class_private_method_get(this, _activeTab, tabs_activeTab).call(this, activeTabId);
|
|
191
|
+
}
|
|
192
|
+
async createTab() {
|
|
193
|
+
const pptrPage = await _class_private_field_get(this, _pptrBrowser).newPage();
|
|
194
|
+
const targetId = pptrPage.target()._targetId;
|
|
195
|
+
await _class_private_method_get(this, _createTab, createTab).call(this, targetId, pptrPage);
|
|
196
|
+
await _class_private_method_get(this, _activeTab, tabs_activeTab).call(this, targetId);
|
|
197
|
+
return targetId;
|
|
198
|
+
}
|
|
199
|
+
async activeTab(tabId) {
|
|
200
|
+
console.log('public activeTab', tabId);
|
|
201
|
+
return await _class_private_method_get(this, _activeTab, tabs_activeTab).call(this, tabId);
|
|
202
|
+
}
|
|
203
|
+
getActiveTab() {
|
|
204
|
+
if (!this.state.activeTabId) return null;
|
|
205
|
+
return _class_private_field_get(this, _tabs).get(this.state.activeTabId) || null;
|
|
206
|
+
}
|
|
207
|
+
async closeTab(tabId) {
|
|
208
|
+
return await _class_private_method_get(this, _closeTab, closeTab).call(this, tabId);
|
|
209
|
+
}
|
|
210
|
+
getCurrentUrl() {
|
|
211
|
+
const activeTab = this.getActiveTab();
|
|
212
|
+
return activeTab ? activeTab.url : 'about:blank';
|
|
213
|
+
}
|
|
214
|
+
hasTab(tabId) {
|
|
215
|
+
return this.state.tabs.has(tabId);
|
|
216
|
+
}
|
|
217
|
+
async destroy() {
|
|
218
|
+
_class_private_field_set(this, _isIntentionalDestroy, true);
|
|
219
|
+
const closeTasks = Array.from(_class_private_field_get(this, _tabs).keys()).map((tabId)=>this.closeTab(tabId));
|
|
220
|
+
await Promise.all(closeTasks);
|
|
221
|
+
}
|
|
222
|
+
constructor(browser, options){
|
|
223
|
+
_class_private_method_init(this, _createTab);
|
|
224
|
+
_class_private_method_init(this, _handleTargetCreated);
|
|
225
|
+
_class_private_method_init(this, _activeTab);
|
|
226
|
+
_class_private_method_init(this, _closeTab);
|
|
227
|
+
_class_private_method_init(this, _handleTargetDestroyed);
|
|
228
|
+
_class_private_method_init(this, _syncTabMeta);
|
|
229
|
+
_class_private_method_init(this, _updateTabDialog);
|
|
230
|
+
_class_private_method_init(this, _setupTabEvents);
|
|
231
|
+
_class_private_field_init(this, _pptrBrowser, {
|
|
232
|
+
writable: true,
|
|
233
|
+
value: void 0
|
|
234
|
+
});
|
|
235
|
+
_class_private_field_init(this, _tabs, {
|
|
236
|
+
writable: true,
|
|
237
|
+
value: void 0
|
|
238
|
+
});
|
|
239
|
+
_class_private_field_init(this, _options, {
|
|
240
|
+
writable: true,
|
|
241
|
+
value: void 0
|
|
242
|
+
});
|
|
243
|
+
_class_private_field_init(this, _operations, {
|
|
244
|
+
writable: true,
|
|
245
|
+
value: void 0
|
|
246
|
+
});
|
|
247
|
+
_define_property(this, "state", void 0);
|
|
248
|
+
_class_private_field_init(this, _isIntentionalDestroy, {
|
|
249
|
+
writable: true,
|
|
250
|
+
value: false
|
|
251
|
+
});
|
|
252
|
+
_class_private_field_init(this, _cteateMutex, {
|
|
253
|
+
writable: true,
|
|
254
|
+
value: new index_js_namespaceObject.Mutex()
|
|
255
|
+
});
|
|
256
|
+
_class_private_field_init(this, _activeMutex, {
|
|
257
|
+
writable: true,
|
|
258
|
+
value: new index_js_namespaceObject.Mutex()
|
|
259
|
+
});
|
|
260
|
+
_class_private_field_init(this, _closeMutex, {
|
|
261
|
+
writable: true,
|
|
262
|
+
value: new index_js_namespaceObject.Mutex()
|
|
263
|
+
});
|
|
264
|
+
_class_private_field_set(this, _pptrBrowser, browser);
|
|
265
|
+
_class_private_field_set(this, _options, options);
|
|
266
|
+
_class_private_field_set(this, _tabs, new Map());
|
|
267
|
+
this.state = (0, external_valtio_namespaceObject.proxy)({
|
|
268
|
+
tabs: (0, utils_namespaceObject.proxyMap)(),
|
|
269
|
+
activeTabId: null
|
|
270
|
+
});
|
|
271
|
+
_class_private_field_set(this, _operations, {
|
|
272
|
+
creatingTargetIds: new Set(),
|
|
273
|
+
switchingTargetIds: new Set(),
|
|
274
|
+
closingTargetIds: new Set()
|
|
275
|
+
});
|
|
276
|
+
_class_private_field_get(this, _pptrBrowser).on('targetcreated', (target)=>_class_private_method_get(this, _handleTargetCreated, handleTargetCreated).call(this, target));
|
|
277
|
+
_class_private_field_get(this, _pptrBrowser).on('targetdestroyed', (target)=>_class_private_method_get(this, _handleTargetDestroyed, handleTargetDestroyed).call(this, target));
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
async function createTab(targetId, pptrPage) {
|
|
281
|
+
const env = {
|
|
282
|
+
stack: [],
|
|
283
|
+
error: void 0,
|
|
284
|
+
hasError: false
|
|
285
|
+
};
|
|
286
|
+
try {
|
|
287
|
+
_ts_add_disposable_resource(env, await _class_private_field_get(this, _cteateMutex).acquire(), false);
|
|
288
|
+
if (_class_private_field_get(this, _operations).creatingTargetIds.has(targetId)) return targetId;
|
|
289
|
+
_class_private_field_get(this, _operations).creatingTargetIds.add(targetId);
|
|
290
|
+
const tab = this.createTabInstance(pptrPage, {
|
|
291
|
+
tabId: targetId,
|
|
292
|
+
..._class_private_field_get(this, _options)
|
|
293
|
+
});
|
|
294
|
+
_class_private_field_get(this, _tabs).set(targetId, tab);
|
|
295
|
+
_class_private_method_get(this, _setupTabEvents, setupTabEvents).call(this, tab, targetId);
|
|
296
|
+
await _class_private_method_get(this, _syncTabMeta, syncTabMeta).call(this, targetId);
|
|
297
|
+
return targetId;
|
|
298
|
+
} catch (e) {
|
|
299
|
+
env.error = e;
|
|
300
|
+
env.hasError = true;
|
|
301
|
+
} finally{
|
|
302
|
+
tabs_ts_dispose_resources(env);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
async function handleTargetCreated(target) {
|
|
306
|
+
if ('page' !== target.type()) return;
|
|
307
|
+
const pptrPage = await target.page();
|
|
308
|
+
if (!pptrPage) return;
|
|
309
|
+
const targetId = target._targetId;
|
|
310
|
+
console.log('handleTargetCreated', targetId);
|
|
311
|
+
await _class_private_method_get(this, _createTab, createTab).call(this, targetId, pptrPage);
|
|
312
|
+
await _class_private_method_get(this, _activeTab, tabs_activeTab).call(this, targetId);
|
|
313
|
+
return targetId;
|
|
314
|
+
}
|
|
315
|
+
async function tabs_activeTab(tabId) {
|
|
316
|
+
const env = {
|
|
317
|
+
stack: [],
|
|
318
|
+
error: void 0,
|
|
319
|
+
hasError: false
|
|
320
|
+
};
|
|
321
|
+
try {
|
|
322
|
+
_ts_add_disposable_resource(env, await _class_private_field_get(this, _activeMutex).acquire(), false);
|
|
323
|
+
if (_class_private_field_get(this, _operations).switchingTargetIds.has(tabId)) return false;
|
|
324
|
+
_class_private_field_get(this, _operations).switchingTargetIds.add(tabId);
|
|
325
|
+
const tab = _class_private_field_get(this, _tabs).get(tabId);
|
|
326
|
+
if (!tab) {
|
|
327
|
+
_class_private_field_get(this, _operations).switchingTargetIds.delete(tabId);
|
|
328
|
+
return false;
|
|
329
|
+
}
|
|
330
|
+
if (this.state.activeTabId === tabId) {
|
|
331
|
+
_class_private_field_get(this, _operations).switchingTargetIds.delete(tabId);
|
|
332
|
+
return true;
|
|
333
|
+
}
|
|
334
|
+
this.state.activeTabId = tabId;
|
|
335
|
+
await tab._active();
|
|
336
|
+
await _class_private_method_get(this, _syncTabMeta, syncTabMeta).call(this, this.state.activeTabId);
|
|
337
|
+
const inactivePromises = [];
|
|
338
|
+
for (const [id, tabInstance] of _class_private_field_get(this, _tabs))if (id !== tabId) inactivePromises.push(tabInstance._inactive());
|
|
339
|
+
await Promise.all(inactivePromises);
|
|
340
|
+
_class_private_field_get(this, _operations).switchingTargetIds.delete(tabId);
|
|
341
|
+
return true;
|
|
342
|
+
} catch (e) {
|
|
343
|
+
env.error = e;
|
|
344
|
+
env.hasError = true;
|
|
345
|
+
} finally{
|
|
346
|
+
tabs_ts_dispose_resources(env);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
async function closeTab(tabId) {
|
|
350
|
+
const env = {
|
|
351
|
+
stack: [],
|
|
352
|
+
error: void 0,
|
|
353
|
+
hasError: false
|
|
354
|
+
};
|
|
355
|
+
try {
|
|
356
|
+
_ts_add_disposable_resource(env, await _class_private_field_get(this, _closeMutex).acquire(), false);
|
|
357
|
+
if (_class_private_field_get(this, _operations).closingTargetIds.has(tabId)) return false;
|
|
358
|
+
_class_private_field_get(this, _operations).closingTargetIds.add(tabId);
|
|
359
|
+
const tab = _class_private_field_get(this, _tabs).get(tabId);
|
|
360
|
+
if (!tab) return false;
|
|
361
|
+
await tab._close();
|
|
362
|
+
_class_private_field_get(this, _tabs).delete(tabId);
|
|
363
|
+
this.state.tabs.delete(tabId);
|
|
364
|
+
if (this.state.activeTabId === tabId) {
|
|
365
|
+
this.state.activeTabId = null;
|
|
366
|
+
if (0 === _class_private_field_get(this, _tabs).size && !_class_private_field_get(this, _isIntentionalDestroy)) await this.createTab();
|
|
367
|
+
}
|
|
368
|
+
return true;
|
|
369
|
+
} catch (e) {
|
|
370
|
+
env.error = e;
|
|
371
|
+
env.hasError = true;
|
|
372
|
+
} finally{
|
|
373
|
+
tabs_ts_dispose_resources(env);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
async function handleTargetDestroyed(target) {
|
|
377
|
+
if ('page' !== target.type()) return;
|
|
378
|
+
const targetId = target._targetId;
|
|
379
|
+
await _class_private_method_get(this, _closeTab, closeTab).call(this, targetId);
|
|
380
|
+
}
|
|
381
|
+
async function syncTabMeta(tabId, isLoading = false) {
|
|
382
|
+
const tab = _class_private_field_get(this, _tabs).get(tabId);
|
|
383
|
+
if (!tab) return;
|
|
384
|
+
const [title, favicon, historyData] = await Promise.all([
|
|
385
|
+
tab.getTitle().catch(()=>'Loading...'),
|
|
386
|
+
tab.getFavicon().catch(()=>''),
|
|
387
|
+
tab.getHistory().catch(()=>({
|
|
388
|
+
index: 0,
|
|
389
|
+
history: [],
|
|
390
|
+
canGoBack: false,
|
|
391
|
+
canGoForward: false
|
|
392
|
+
}))
|
|
393
|
+
]);
|
|
394
|
+
const tabMeta = {
|
|
395
|
+
id: tabId,
|
|
396
|
+
url: tab.url || 'about:blank',
|
|
397
|
+
title: title,
|
|
398
|
+
favicon: favicon,
|
|
399
|
+
isLoading: isLoading,
|
|
400
|
+
isActive: tabId === this.state.activeTabId,
|
|
401
|
+
canGoBack: historyData.canGoBack,
|
|
402
|
+
canGoForward: historyData.canGoForward
|
|
403
|
+
};
|
|
404
|
+
this.state.tabs.set(tabId, tabMeta);
|
|
405
|
+
}
|
|
406
|
+
function updateTabDialog(tabId, dialogMeta) {
|
|
407
|
+
const currentTabMeta = this.state.tabs.get(tabId);
|
|
408
|
+
if (!currentTabMeta) return;
|
|
409
|
+
const updatedTabMeta = {
|
|
410
|
+
...currentTabMeta,
|
|
411
|
+
dialog: dialogMeta || void 0
|
|
412
|
+
};
|
|
413
|
+
this.state.tabs.set(tabId, updatedTabMeta);
|
|
414
|
+
}
|
|
415
|
+
function setupTabEvents(tab, tabId) {
|
|
416
|
+
tab.on(tabs_js_namespaceObject.TabEvents.TabLoadingStateChanged, (event)=>{
|
|
417
|
+
const currentTabMeta = this.state.tabs.get(tabId);
|
|
418
|
+
if (!currentTabMeta) return;
|
|
419
|
+
const updatedTabMeta = {
|
|
420
|
+
...currentTabMeta,
|
|
421
|
+
isLoading: event.isLoading
|
|
422
|
+
};
|
|
423
|
+
this.state.tabs.set(tabId, updatedTabMeta);
|
|
424
|
+
});
|
|
425
|
+
tab.on(tabs_js_namespaceObject.TabEvents.TabUrlChanged, (event)=>{
|
|
426
|
+
const currentTabMeta = this.state.tabs.get(tabId);
|
|
427
|
+
if (!currentTabMeta) return;
|
|
428
|
+
const updatedTabMeta = {
|
|
429
|
+
...currentTabMeta,
|
|
430
|
+
url: event.newUrl,
|
|
431
|
+
title: event.title,
|
|
432
|
+
favicon: event.favicon,
|
|
433
|
+
canGoBack: event.canGoBack,
|
|
434
|
+
canGoForward: event.canGoForward
|
|
435
|
+
};
|
|
436
|
+
this.state.tabs.set(tabId, updatedTabMeta);
|
|
437
|
+
});
|
|
438
|
+
tab.on(tabs_js_namespaceObject.TabEvents.TabVisibilityChanged, (event)=>{
|
|
439
|
+
if (event.isVisible) _class_private_method_get(this, _activeTab, tabs_activeTab).call(this, event.tabId);
|
|
440
|
+
});
|
|
441
|
+
tab.on(tabs_js_namespaceObject.TabEvents.TabDialogChanged, (event)=>{
|
|
442
|
+
if (event.isOpen) _class_private_method_get(this, _updateTabDialog, updateTabDialog).call(this, tabId, {
|
|
443
|
+
type: event.type,
|
|
444
|
+
message: event.message,
|
|
445
|
+
defaultValue: event.defaultValue
|
|
446
|
+
});
|
|
447
|
+
else _class_private_method_get(this, _updateTabDialog, updateTabDialog).call(this, tabId, null);
|
|
448
|
+
});
|
|
449
|
+
}
|
|
450
|
+
exports.Tabs = __webpack_exports__.Tabs;
|
|
451
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
452
|
+
"Tabs"
|
|
453
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
454
|
+
Object.defineProperty(exports, '__esModule', {
|
|
455
|
+
value: true
|
|
456
|
+
});
|
|
457
|
+
|
|
458
|
+
//# sourceMappingURL=tabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs/tabs.js","sources":["webpack://@agent-infra/browser/webpack/runtime/define_property_getters","webpack://@agent-infra/browser/webpack/runtime/has_own_property","webpack://@agent-infra/browser/webpack/runtime/make_namespace_object","webpack://@agent-infra/browser/./src/tabs/tabs.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/*\n * Copyright (c) 2025 Bytedance, Inc. and its affiliates.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { proxy, subscribe } from 'valtio';\nimport { proxyMap } from 'valtio/utils';\nimport { Tab } from './tab';\nimport { validateNavigationUrl, Mutex } from '../utils';\n\nimport type { Browser, Page, Target } from 'puppeteer-core';\nimport {\n TabEvents,\n type TabEventsMap,\n type TabMeta,\n type TabOptions,\n type TabsState,\n type TabsOperationTracker,\n type TabsOptions,\n type DialogMeta,\n} from '../types/tabs';\n\nexport class Tabs<T extends Tab = Tab> {\n #pptrBrowser: Browser;\n #tabs: Map<string, T>;\n #options: TabsOptions;\n\n #operations: TabsOperationTracker;\n\n public state: TabsState;\n #isIntentionalDestroy = false;\n\n static async create(browser: Browser, options: TabsOptions) {\n const tabs = new Tabs(browser, options);\n await tabs.initializeExistingTabs();\n return tabs;\n }\n\n constructor(browser: Browser, options: TabsOptions) {\n this.#pptrBrowser = browser;\n this.#options = options;\n\n this.#tabs = new Map<string, T>();\n this.state = proxy({\n tabs: proxyMap<string, TabMeta>(),\n activeTabId: null,\n });\n this.#operations = {\n creatingTargetIds: new Set<string>(),\n switchingTargetIds: new Set<string>(),\n closingTargetIds: new Set<string>(),\n };\n\n // tabs events\n this.#pptrBrowser.on('targetcreated', (target) =>\n this.#handleTargetCreated(target),\n );\n this.#pptrBrowser.on('targetdestroyed', (target) =>\n this.#handleTargetDestroyed(target),\n );\n }\n\n subscribe(callback: () => void): () => void {\n return subscribe(this.state, callback);\n }\n\n getSnapshot(): TabsState {\n return {\n tabs: new Map(this.state.tabs),\n activeTabId: this.state.activeTabId,\n };\n }\n\n protected createTabInstance(page: Page, options: TabOptions): T {\n return new Tab(page, options) as T;\n }\n\n // #region init ExistingTabs\n\n protected async initializeExistingTabs() {\n const existingPages = await this.#pptrBrowser.pages();\n\n // console.log('initializeExistingTabs', existingPages);\n\n if (existingPages.length === 0) {\n return;\n }\n\n // init all existing tabs\n const initTabTasks = existingPages\n .filter((pptrPage) => !validateNavigationUrl(pptrPage.url()).ignored) // not allowed chrome devtools frontend\n .map(async (pptrPage) => {\n // @ts-ignore\n const tabId = pptrPage.target()._targetId;\n const tab = this.createTabInstance(pptrPage, {\n tabId: tabId,\n ...this.#options,\n });\n\n this.#tabs.set(tabId, tab);\n this.#setupTabEvents(tab, tabId);\n await this.#syncTabMeta(tabId);\n\n const isActive = await tab._checkActiveStatusWithRuntime();\n return { tabId, pptrPage, isActive };\n });\n const initedTabs = await Promise.all(initTabTasks);\n\n // active tab\n let activeTabId = initedTabs.find((result) => result.isActive)?.tabId;\n if (!activeTabId) {\n activeTabId = initedTabs[0].tabId;\n }\n\n await this.#activeTab(activeTabId);\n }\n\n // #endregion\n\n // #region createTab\n\n #cteateMutex = new Mutex();\n async #createTab(targetId: string, pptrPage: Page) {\n using _ = await this.#cteateMutex.acquire();\n\n if (this.#operations.creatingTargetIds.has(targetId)) {\n return targetId;\n }\n this.#operations.creatingTargetIds.add(targetId);\n\n const tab = this.createTabInstance(pptrPage, {\n tabId: targetId,\n ...this.#options,\n });\n\n this.#tabs.set(targetId, tab);\n this.#setupTabEvents(tab, targetId);\n await this.#syncTabMeta(targetId);\n\n return targetId;\n }\n\n async #handleTargetCreated(target: Target) {\n if (target.type() !== 'page') {\n return;\n }\n const pptrPage = await target.page();\n if (!pptrPage) {\n return;\n }\n // @ts-ignore\n const targetId = target._targetId;\n\n console.log('handleTargetCreated', targetId);\n\n await this.#createTab(targetId, pptrPage);\n await this.#activeTab(targetId);\n\n return targetId;\n }\n\n async createTab(): Promise<string> {\n const pptrPage = await this.#pptrBrowser.newPage();\n // @ts-ignore\n const targetId = pptrPage.target()._targetId;\n\n await this.#createTab(targetId, pptrPage);\n await this.#activeTab(targetId);\n\n return targetId;\n }\n\n // #endregion\n\n // #region activeTab\n\n #activeMutex = new Mutex();\n async #activeTab(tabId: string) {\n using _ = await this.#activeMutex.acquire();\n\n // console.trace('#activeTab', tabId);\n\n // check lock\n if (this.#operations.switchingTargetIds.has(tabId)) {\n return false;\n }\n this.#operations.switchingTargetIds.add(tabId);\n\n // check tab existence\n const tab = this.#tabs.get(tabId);\n if (!tab) {\n this.#operations.switchingTargetIds.delete(tabId);\n return false;\n }\n if (this.state.activeTabId === tabId) {\n this.#operations.switchingTargetIds.delete(tabId);\n return true;\n }\n\n // active select tab\n this.state.activeTabId = tabId;\n await tab._active();\n await this.#syncTabMeta(this.state.activeTabId);\n\n // inactivate other tabs\n const inactivePromises = [];\n for (const [id, tabInstance] of this.#tabs) {\n if (id !== tabId) {\n inactivePromises.push(tabInstance._inactive());\n }\n }\n await Promise.all(inactivePromises);\n\n // release lock\n this.#operations.switchingTargetIds.delete(tabId);\n\n return true;\n }\n\n async activeTab(tabId: string): Promise<boolean> {\n console.log('public activeTab', tabId);\n\n return await this.#activeTab(tabId);\n }\n\n getActiveTab(): T | null {\n if (!this.state.activeTabId) return null;\n return this.#tabs.get(this.state.activeTabId) || null;\n }\n\n // #endregion\n\n // #region closeTab\n\n #closeMutex = new Mutex();\n async #closeTab(tabId: string): Promise<boolean> {\n using _ = await this.#closeMutex.acquire();\n\n // check\n if (this.#operations.closingTargetIds.has(tabId)) {\n return false;\n }\n this.#operations.closingTargetIds.add(tabId);\n\n // close tab\n const tab = this.#tabs.get(tabId);\n if (!tab) {\n return false;\n }\n await tab._close();\n this.#tabs.delete(tabId);\n this.state.tabs.delete(tabId);\n\n // fallback logic to prevent the browser from being closed directly\n if (this.state.activeTabId === tabId) {\n this.state.activeTabId = null;\n\n if (this.#tabs.size === 0 && !this.#isIntentionalDestroy) {\n await this.createTab();\n }\n }\n\n return true;\n }\n\n async #handleTargetDestroyed(target: Target) {\n if (target.type() !== 'page') {\n return;\n }\n\n // @ts-ignore\n const targetId = target._targetId;\n await this.#closeTab(targetId);\n }\n\n async closeTab(tabId: string): Promise<boolean> {\n return await this.#closeTab(tabId);\n }\n\n // #endregion\n\n // #region public methods\n\n getCurrentUrl(): string {\n const activeTab = this.getActiveTab();\n return activeTab ? activeTab.url : 'about:blank';\n }\n\n hasTab(tabId: string): boolean {\n return this.state.tabs.has(tabId);\n }\n\n async destroy(): Promise<void> {\n this.#isIntentionalDestroy = true;\n\n const closeTasks = Array.from(this.#tabs.keys()).map((tabId) =>\n this.closeTab(tabId),\n );\n await Promise.all(closeTasks);\n }\n\n // #endregion\n\n // #region private methods\n\n async #syncTabMeta(tabId: string, isLoading = false): Promise<void> {\n const tab = this.#tabs.get(tabId);\n if (!tab) return;\n\n const [title, favicon, historyData] = await Promise.all([\n tab.getTitle().catch(() => 'Loading...'),\n tab.getFavicon().catch(() => ''),\n tab.getHistory().catch(() => ({\n index: 0,\n history: [],\n canGoBack: false,\n canGoForward: false,\n })),\n ]);\n\n const tabMeta: TabMeta = {\n id: tabId,\n url: tab.url || 'about:blank',\n title: title,\n favicon: favicon,\n isLoading: isLoading,\n isActive: tabId === this.state.activeTabId,\n canGoBack: historyData.canGoBack,\n canGoForward: historyData.canGoForward,\n };\n\n // console.log('syncTabMeta', tabId, tabMeta);\n\n this.state.tabs.set(tabId, tabMeta);\n }\n\n #updateTabDialog(tabId: string, dialogMeta: DialogMeta | null): void {\n const currentTabMeta = this.state.tabs.get(tabId);\n if (!currentTabMeta) return;\n\n const updatedTabMeta: TabMeta = {\n ...currentTabMeta,\n dialog: dialogMeta || undefined,\n };\n\n this.state.tabs.set(tabId, updatedTabMeta);\n }\n\n #setupTabEvents(tab: Tab, tabId: string): void {\n tab.on(\n TabEvents.TabLoadingStateChanged,\n (event: TabEventsMap[TabEvents.TabLoadingStateChanged]) => {\n const currentTabMeta = this.state.tabs.get(tabId);\n if (!currentTabMeta) return;\n\n const updatedTabMeta: TabMeta = {\n ...currentTabMeta,\n isLoading: event.isLoading,\n };\n\n this.state.tabs.set(tabId, updatedTabMeta);\n },\n );\n tab.on(\n TabEvents.TabUrlChanged,\n (event: TabEventsMap[TabEvents.TabUrlChanged]) => {\n const currentTabMeta = this.state.tabs.get(tabId);\n if (!currentTabMeta) return;\n\n const updatedTabMeta: TabMeta = {\n ...currentTabMeta,\n url: event.newUrl,\n title: event.title,\n favicon: event.favicon,\n canGoBack: event.canGoBack,\n canGoForward: event.canGoForward,\n };\n\n this.state.tabs.set(tabId, updatedTabMeta);\n },\n );\n tab.on(\n TabEvents.TabVisibilityChanged,\n (event: TabEventsMap[TabEvents.TabVisibilityChanged]) => {\n if (event.isVisible) {\n this.#activeTab(event.tabId);\n }\n },\n );\n tab.on(\n TabEvents.TabDialogChanged,\n (event: TabEventsMap[TabEvents.TabDialogChanged]) => {\n if (event.isOpen) {\n this.#updateTabDialog(tabId, {\n type: event.type!,\n message: event.message!,\n defaultValue: event.defaultValue!,\n });\n } else {\n this.#updateTabDialog(tabId, null);\n }\n },\n );\n }\n\n // #endregion\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","_pptrBrowser","_tabs","_options","_operations","_isIntentionalDestroy","_cteateMutex","_createTab","_handleTargetCreated","_activeMutex","_activeTab","_closeMutex","_closeTab","_handleTargetDestroyed","_syncTabMeta","updateTabDialog","setupTabEvents","Tabs","browser","options","tabs","callback","subscribe","Map","page","Tab","_initedTabs_find","existingPages","initTabTasks","pptrPage","validateNavigationUrl","tabId","tab","syncTabMeta","isActive","initedTabs","Promise","activeTabId","result","activeTab","targetId","createTab","console","closeTab","closeTasks","Array","handleTargetCreated","handleTargetDestroyed","Mutex","proxy","proxyMap","Set","target","_","inactivePromises","id","tabInstance","isLoading","title","favicon","historyData","tabMeta","dialogMeta","currentTabMeta","updatedTabMeta","undefined","TabEvents","event"],"mappings":"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"}
|