/** Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright (c) 2015-2018 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ // node_modules/tslib/tslib.es6.mjs var extendStatics = function(d, b) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { d2.__proto__ = b2; } || function(d2, b2) { for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p]; }; return extendStatics(d, b); }; function __extends(d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); } function __awaiter(thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function(resolve) { resolve(value); }); } return new (P || (P = Promise))(function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); } function __generator(thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function(v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (g && (g = 0, op[0] && (_ = 0)), _) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } } function __values(o) { var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; if (m) return m.call(o); if (o && typeof o.length === "number") return { next: function() { if (o && i >= o.length) o = void 0; return { value: o && o[i++], done: !o }; } }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); } function __read(o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; } function __spreadArray(to, from2, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from2.length, ar; i < l; i++) { if (ar || !(i in from2)) { if (!ar) ar = Array.prototype.slice.call(from2, 0, i); ar[i] = from2[i]; } } return to.concat(ar || Array.prototype.slice.call(from2)); } function __await(v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } function __asyncGenerator(thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var g = generator.apply(thisArg, _arguments || []), i, q = []; return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function() { return this; }, i; function verb(n) { if (g[n]) i[n] = function(v) { return new Promise(function(a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } } function __asyncValues(o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m = o[Symbol.asyncIterator], i; return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function() { return this; }, i); function verb(n) { i[n] = o[n] && function(v) { return new Promise(function(resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v2) { resolve({ value: v2, done: d }); }, reject); } } // node_modules/rxjs/dist/esm5/internal/util/isFunction.js function isFunction(value) { return typeof value === "function"; } // node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js function createErrorClass(createImpl) { var _super = function(instance) { Error.call(instance); instance.stack = new Error().stack; }; var ctorFunc = createImpl(_super); ctorFunc.prototype = Object.create(Error.prototype); ctorFunc.prototype.constructor = ctorFunc; return ctorFunc; } // node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js var UnsubscriptionError = createErrorClass(function(_super) { return function UnsubscriptionErrorImpl(errors) { _super(this); this.message = errors ? errors.length + " errors occurred during unsubscription:\n" + errors.map(function(err, i) { return i + 1 + ") " + err.toString(); }).join("\n ") : ""; this.name = "UnsubscriptionError"; this.errors = errors; }; }); // node_modules/rxjs/dist/esm5/internal/util/arrRemove.js function arrRemove(arr, item) { if (arr) { var index = arr.indexOf(item); 0 <= index && arr.splice(index, 1); } } // node_modules/rxjs/dist/esm5/internal/Subscription.js var Subscription = function() { function Subscription2(initialTeardown) { this.initialTeardown = initialTeardown; this.closed = false; this._parentage = null; this._finalizers = null; } Subscription2.prototype.unsubscribe = function() { var e_1, _a, e_2, _b; var errors; if (!this.closed) { this.closed = true; var _parentage = this._parentage; if (_parentage) { this._parentage = null; if (Array.isArray(_parentage)) { try { for (var _parentage_1 = __values(_parentage), _parentage_1_1 = _parentage_1.next(); !_parentage_1_1.done; _parentage_1_1 = _parentage_1.next()) { var parent_1 = _parentage_1_1.value; parent_1.remove(this); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (_parentage_1_1 && !_parentage_1_1.done && (_a = _parentage_1.return)) _a.call(_parentage_1); } finally { if (e_1) throw e_1.error; } } } else { _parentage.remove(this); } } var initialFinalizer = this.initialTeardown; if (isFunction(initialFinalizer)) { try { initialFinalizer(); } catch (e) { errors = e instanceof UnsubscriptionError ? e.errors : [e]; } } var _finalizers = this._finalizers; if (_finalizers) { this._finalizers = null; try { for (var _finalizers_1 = __values(_finalizers), _finalizers_1_1 = _finalizers_1.next(); !_finalizers_1_1.done; _finalizers_1_1 = _finalizers_1.next()) { var finalizer = _finalizers_1_1.value; try { execFinalizer(finalizer); } catch (err) { errors = errors !== null && errors !== void 0 ? errors : []; if (err instanceof UnsubscriptionError) { errors = __spreadArray(__spreadArray([], __read(errors)), __read(err.errors)); } else { errors.push(err); } } } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (_finalizers_1_1 && !_finalizers_1_1.done && (_b = _finalizers_1.return)) _b.call(_finalizers_1); } finally { if (e_2) throw e_2.error; } } } if (errors) { throw new UnsubscriptionError(errors); } } }; Subscription2.prototype.add = function(teardown) { var _a; if (teardown && teardown !== this) { if (this.closed) { execFinalizer(teardown); } else { if (teardown instanceof Subscription2) { if (teardown.closed || teardown._hasParent(this)) { return; } teardown._addParent(this); } (this._finalizers = (_a = this._finalizers) !== null && _a !== void 0 ? _a : []).push(teardown); } } }; Subscription2.prototype._hasParent = function(parent) { var _parentage = this._parentage; return _parentage === parent || Array.isArray(_parentage) && _parentage.includes(parent); }; Subscription2.prototype._addParent = function(parent) { var _parentage = this._parentage; this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent; }; Subscription2.prototype._removeParent = function(parent) { var _parentage = this._parentage; if (_parentage === parent) { this._parentage = null; } else if (Array.isArray(_parentage)) { arrRemove(_parentage, parent); } }; Subscription2.prototype.remove = function(teardown) { var _finalizers = this._finalizers; _finalizers && arrRemove(_finalizers, teardown); if (teardown instanceof Subscription2) { teardown._removeParent(this); } }; Subscription2.EMPTY = function() { var empty = new Subscription2(); empty.closed = true; return empty; }(); return Subscription2; }(); var EMPTY_SUBSCRIPTION = Subscription.EMPTY; function isSubscription(value) { return value instanceof Subscription || value && "closed" in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe); } function execFinalizer(finalizer) { if (isFunction(finalizer)) { finalizer(); } else { finalizer.unsubscribe(); } } // node_modules/rxjs/dist/esm5/internal/config.js var config = { onUnhandledError: null, onStoppedNotification: null, Promise: void 0, useDeprecatedSynchronousErrorHandling: false, useDeprecatedNextContext: false }; // node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js var timeoutProvider = { setTimeout: function(handler, timeout) { var args = []; for (var _i = 2; _i < arguments.length; _i++) { args[_i - 2] = arguments[_i]; } return setTimeout.apply(void 0, __spreadArray([handler, timeout], __read(args))); }, clearTimeout: function(handle) { return (clearTimeout)(handle); }, delegate: void 0 }; // node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js function reportUnhandledError(err) { timeoutProvider.setTimeout(function() { { throw err; } }); } // node_modules/rxjs/dist/esm5/internal/util/noop.js function noop() { } function errorContext(cb) { { cb(); } } // node_modules/rxjs/dist/esm5/internal/Subscriber.js var Subscriber = function(_super) { __extends(Subscriber2, _super); function Subscriber2(destination) { var _this = _super.call(this) || this; _this.isStopped = false; if (destination) { _this.destination = destination; if (isSubscription(destination)) { destination.add(_this); } } else { _this.destination = EMPTY_OBSERVER; } return _this; } Subscriber2.create = function(next, error, complete) { return new SafeSubscriber(next, error, complete); }; Subscriber2.prototype.next = function(value) { if (this.isStopped) ; else { this._next(value); } }; Subscriber2.prototype.error = function(err) { if (this.isStopped) ; else { this.isStopped = true; this._error(err); } }; Subscriber2.prototype.complete = function() { if (this.isStopped) ; else { this.isStopped = true; this._complete(); } }; Subscriber2.prototype.unsubscribe = function() { if (!this.closed) { this.isStopped = true; _super.prototype.unsubscribe.call(this); this.destination = null; } }; Subscriber2.prototype._next = function(value) { this.destination.next(value); }; Subscriber2.prototype._error = function(err) { try { this.destination.error(err); } finally { this.unsubscribe(); } }; Subscriber2.prototype._complete = function() { try { this.destination.complete(); } finally { this.unsubscribe(); } }; return Subscriber2; }(Subscription); var _bind = Function.prototype.bind; function bind(fn, thisArg) { return _bind.call(fn, thisArg); } var ConsumerObserver = function() { function ConsumerObserver2(partialObserver) { this.partialObserver = partialObserver; } ConsumerObserver2.prototype.next = function(value) { var partialObserver = this.partialObserver; if (partialObserver.next) { try { partialObserver.next(value); } catch (error) { handleUnhandledError(error); } } }; ConsumerObserver2.prototype.error = function(err) { var partialObserver = this.partialObserver; if (partialObserver.error) { try { partialObserver.error(err); } catch (error) { handleUnhandledError(error); } } else { handleUnhandledError(err); } }; ConsumerObserver2.prototype.complete = function() { var partialObserver = this.partialObserver; if (partialObserver.complete) { try { partialObserver.complete(); } catch (error) { handleUnhandledError(error); } } }; return ConsumerObserver2; }(); var SafeSubscriber = function(_super) { __extends(SafeSubscriber2, _super); function SafeSubscriber2(observerOrNext, error, complete) { var _this = _super.call(this) || this; var partialObserver; if (isFunction(observerOrNext) || !observerOrNext) { partialObserver = { next: observerOrNext !== null && observerOrNext !== void 0 ? observerOrNext : void 0, error: error !== null && error !== void 0 ? error : void 0, complete: complete !== null && complete !== void 0 ? complete : void 0 }; } else { var context_1; if (_this && config.useDeprecatedNextContext) { context_1 = Object.create(observerOrNext); context_1.unsubscribe = function() { return _this.unsubscribe(); }; partialObserver = { next: observerOrNext.next && bind(observerOrNext.next, context_1), error: observerOrNext.error && bind(observerOrNext.error, context_1), complete: observerOrNext.complete && bind(observerOrNext.complete, context_1) }; } else { partialObserver = observerOrNext; } } _this.destination = new ConsumerObserver(partialObserver); return _this; } return SafeSubscriber2; }(Subscriber); function handleUnhandledError(error) { { reportUnhandledError(error); } } function defaultErrorHandler(err) { throw err; } var EMPTY_OBSERVER = { closed: true, next: noop, error: defaultErrorHandler, complete: noop }; // node_modules/rxjs/dist/esm5/internal/symbol/observable.js var observable = function() { return typeof Symbol === "function" && Symbol.observable || "@@observable"; }(); // node_modules/rxjs/dist/esm5/internal/util/identity.js function identity(x) { return x; } // node_modules/rxjs/dist/esm5/internal/util/pipe.js function pipe() { var fns = []; for (var _i = 0; _i < arguments.length; _i++) { fns[_i] = arguments[_i]; } return pipeFromArray(fns); } function pipeFromArray(fns) { if (fns.length === 0) { return identity; } if (fns.length === 1) { return fns[0]; } return function piped(input) { return fns.reduce(function(prev, fn) { return fn(prev); }, input); }; } // node_modules/rxjs/dist/esm5/internal/Observable.js var Observable = function() { function Observable2(subscribe) { if (subscribe) { this._subscribe = subscribe; } } Observable2.prototype.lift = function(operator) { var observable2 = new Observable2(); observable2.source = this; observable2.operator = operator; return observable2; }; Observable2.prototype.subscribe = function(observerOrNext, error, complete) { var _this = this; var subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete); errorContext(function() { var _a = _this, operator = _a.operator, source = _a.source; subscriber.add(operator ? operator.call(subscriber, source) : source ? _this._subscribe(subscriber) : _this._trySubscribe(subscriber)); }); return subscriber; }; Observable2.prototype._trySubscribe = function(sink) { try { return this._subscribe(sink); } catch (err) { sink.error(err); } }; Observable2.prototype.forEach = function(next, promiseCtor) { var _this = this; promiseCtor = getPromiseCtor(promiseCtor); return new promiseCtor(function(resolve, reject) { var subscriber = new SafeSubscriber({ next: function(value) { try { next(value); } catch (err) { reject(err); subscriber.unsubscribe(); } }, error: reject, complete: resolve }); _this.subscribe(subscriber); }); }; Observable2.prototype._subscribe = function(subscriber) { var _a; return (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber); }; Observable2.prototype[observable] = function() { return this; }; Observable2.prototype.pipe = function() { var operations = []; for (var _i = 0; _i < arguments.length; _i++) { operations[_i] = arguments[_i]; } return pipeFromArray(operations)(this); }; Observable2.prototype.toPromise = function(promiseCtor) { var _this = this; promiseCtor = getPromiseCtor(promiseCtor); return new promiseCtor(function(resolve, reject) { var value; _this.subscribe(function(x) { return value = x; }, function(err) { return reject(err); }, function() { return resolve(value); }); }); }; Observable2.create = function(subscribe) { return new Observable2(subscribe); }; return Observable2; }(); function getPromiseCtor(promiseCtor) { var _a; return (_a = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : config.Promise) !== null && _a !== void 0 ? _a : Promise; } function isObserver(value) { return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete); } function isSubscriber(value) { return value && value instanceof Subscriber || isObserver(value) && isSubscription(value); } // node_modules/rxjs/dist/esm5/internal/util/lift.js function hasLift(source) { return isFunction(source === null || source === void 0 ? void 0 : source.lift); } function operate(init) { return function(source) { if (hasLift(source)) { return source.lift(function(liftedSource) { try { return init(liftedSource, this); } catch (err) { this.error(err); } }); } throw new TypeError("Unable to lift unknown Observable type"); }; } // node_modules/rxjs/dist/esm5/internal/operators/OperatorSubscriber.js function createOperatorSubscriber(destination, onNext, onComplete, onError, onFinalize) { return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize); } var OperatorSubscriber = function(_super) { __extends(OperatorSubscriber2, _super); function OperatorSubscriber2(destination, onNext, onComplete, onError, onFinalize, shouldUnsubscribe) { var _this = _super.call(this, destination) || this; _this.onFinalize = onFinalize; _this.shouldUnsubscribe = shouldUnsubscribe; _this._next = onNext ? function(value) { try { onNext(value); } catch (err) { destination.error(err); } } : _super.prototype._next; _this._error = onError ? function(err) { try { onError(err); } catch (err2) { destination.error(err2); } finally { this.unsubscribe(); } } : _super.prototype._error; _this._complete = onComplete ? function() { try { onComplete(); } catch (err) { destination.error(err); } finally { this.unsubscribe(); } } : _super.prototype._complete; return _this; } OperatorSubscriber2.prototype.unsubscribe = function() { var _a; if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) { var closed_1 = this.closed; _super.prototype.unsubscribe.call(this); !closed_1 && ((_a = this.onFinalize) === null || _a === void 0 ? void 0 : _a.call(this)); } }; return OperatorSubscriber2; }(Subscriber); // node_modules/rxjs/dist/esm5/internal/util/ObjectUnsubscribedError.js var ObjectUnsubscribedError = createErrorClass(function(_super) { return function ObjectUnsubscribedErrorImpl() { _super(this); this.name = "ObjectUnsubscribedError"; this.message = "object unsubscribed"; }; }); // node_modules/rxjs/dist/esm5/internal/Subject.js var Subject = function(_super) { __extends(Subject2, _super); function Subject2() { var _this = _super.call(this) || this; _this.closed = false; _this.currentObservers = null; _this.observers = []; _this.isStopped = false; _this.hasError = false; _this.thrownError = null; return _this; } Subject2.prototype.lift = function(operator) { var subject = new AnonymousSubject(this, this); subject.operator = operator; return subject; }; Subject2.prototype._throwIfClosed = function() { if (this.closed) { throw new ObjectUnsubscribedError(); } }; Subject2.prototype.next = function(value) { var _this = this; errorContext(function() { var e_1, _a; _this._throwIfClosed(); if (!_this.isStopped) { if (!_this.currentObservers) { _this.currentObservers = Array.from(_this.observers); } try { for (var _b = __values(_this.currentObservers), _c = _b.next(); !_c.done; _c = _b.next()) { var observer = _c.value; observer.next(value); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } finally { if (e_1) throw e_1.error; } } } }); }; Subject2.prototype.error = function(err) { var _this = this; errorContext(function() { _this._throwIfClosed(); if (!_this.isStopped) { _this.hasError = _this.isStopped = true; _this.thrownError = err; var observers = _this.observers; while (observers.length) { observers.shift().error(err); } } }); }; Subject2.prototype.complete = function() { var _this = this; errorContext(function() { _this._throwIfClosed(); if (!_this.isStopped) { _this.isStopped = true; var observers = _this.observers; while (observers.length) { observers.shift().complete(); } } }); }; Subject2.prototype.unsubscribe = function() { this.isStopped = this.closed = true; this.observers = this.currentObservers = null; }; Object.defineProperty(Subject2.prototype, "observed", { get: function() { var _a; return ((_a = this.observers) === null || _a === void 0 ? void 0 : _a.length) > 0; }, enumerable: false, configurable: true }); Subject2.prototype._trySubscribe = function(subscriber) { this._throwIfClosed(); return _super.prototype._trySubscribe.call(this, subscriber); }; Subject2.prototype._subscribe = function(subscriber) { this._throwIfClosed(); this._checkFinalizedStatuses(subscriber); return this._innerSubscribe(subscriber); }; Subject2.prototype._innerSubscribe = function(subscriber) { var _this = this; var _a = this, hasError = _a.hasError, isStopped = _a.isStopped, observers = _a.observers; if (hasError || isStopped) { return EMPTY_SUBSCRIPTION; } this.currentObservers = null; observers.push(subscriber); return new Subscription(function() { _this.currentObservers = null; arrRemove(observers, subscriber); }); }; Subject2.prototype._checkFinalizedStatuses = function(subscriber) { var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, isStopped = _a.isStopped; if (hasError) { subscriber.error(thrownError); } else if (isStopped) { subscriber.complete(); } }; Subject2.prototype.asObservable = function() { var observable2 = new Observable(); observable2.source = this; return observable2; }; Subject2.create = function(destination, source) { return new AnonymousSubject(destination, source); }; return Subject2; }(Observable); var AnonymousSubject = function(_super) { __extends(AnonymousSubject2, _super); function AnonymousSubject2(destination, source) { var _this = _super.call(this) || this; _this.destination = destination; _this.source = source; return _this; } AnonymousSubject2.prototype.next = function(value) { var _a, _b; (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.next) === null || _b === void 0 ? void 0 : _b.call(_a, value); }; AnonymousSubject2.prototype.error = function(err) { var _a, _b; (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.call(_a, err); }; AnonymousSubject2.prototype.complete = function() { var _a, _b; (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.complete) === null || _b === void 0 ? void 0 : _b.call(_a); }; AnonymousSubject2.prototype._subscribe = function(subscriber) { var _a, _b; return (_b = (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber)) !== null && _b !== void 0 ? _b : EMPTY_SUBSCRIPTION; }; return AnonymousSubject2; }(Subject); // node_modules/rxjs/dist/esm5/internal/scheduler/dateTimestampProvider.js var dateTimestampProvider = { now: function() { return (dateTimestampProvider.delegate || Date).now(); }, delegate: void 0 }; // node_modules/rxjs/dist/esm5/internal/ReplaySubject.js var ReplaySubject = function(_super) { __extends(ReplaySubject2, _super); function ReplaySubject2(_bufferSize, _windowTime, _timestampProvider) { if (_bufferSize === void 0) { _bufferSize = Infinity; } if (_windowTime === void 0) { _windowTime = Infinity; } if (_timestampProvider === void 0) { _timestampProvider = dateTimestampProvider; } var _this = _super.call(this) || this; _this._bufferSize = _bufferSize; _this._windowTime = _windowTime; _this._timestampProvider = _timestampProvider; _this._buffer = []; _this._infiniteTimeWindow = true; _this._infiniteTimeWindow = _windowTime === Infinity; _this._bufferSize = Math.max(1, _bufferSize); _this._windowTime = Math.max(1, _windowTime); return _this; } ReplaySubject2.prototype.next = function(value) { var _a = this, isStopped = _a.isStopped, _buffer = _a._buffer, _infiniteTimeWindow = _a._infiniteTimeWindow, _timestampProvider = _a._timestampProvider, _windowTime = _a._windowTime; if (!isStopped) { _buffer.push(value); !_infiniteTimeWindow && _buffer.push(_timestampProvider.now() + _windowTime); } this._trimBuffer(); _super.prototype.next.call(this, value); }; ReplaySubject2.prototype._subscribe = function(subscriber) { this._throwIfClosed(); this._trimBuffer(); var subscription = this._innerSubscribe(subscriber); var _a = this, _infiniteTimeWindow = _a._infiniteTimeWindow, _buffer = _a._buffer; var copy = _buffer.slice(); for (var i = 0; i < copy.length && !subscriber.closed; i += _infiniteTimeWindow ? 1 : 2) { subscriber.next(copy[i]); } this._checkFinalizedStatuses(subscriber); return subscription; }; ReplaySubject2.prototype._trimBuffer = function() { var _a = this, _bufferSize = _a._bufferSize, _timestampProvider = _a._timestampProvider, _buffer = _a._buffer, _infiniteTimeWindow = _a._infiniteTimeWindow; var adjustedBufferSize = (_infiniteTimeWindow ? 1 : 2) * _bufferSize; _bufferSize < Infinity && adjustedBufferSize < _buffer.length && _buffer.splice(0, _buffer.length - adjustedBufferSize); if (!_infiniteTimeWindow) { var now = _timestampProvider.now(); var last2 = 0; for (var i = 1; i < _buffer.length && _buffer[i] <= now; i += 2) { last2 = i; } last2 && _buffer.splice(0, last2 + 1); } }; return ReplaySubject2; }(Subject); // node_modules/rxjs/dist/esm5/internal/scheduler/Action.js var Action = function(_super) { __extends(Action2, _super); function Action2(scheduler, work) { return _super.call(this) || this; } Action2.prototype.schedule = function(state, delay2) { return this; }; return Action2; }(Subscription); // node_modules/rxjs/dist/esm5/internal/scheduler/intervalProvider.js var intervalProvider = { setInterval: function(handler, timeout) { var args = []; for (var _i = 2; _i < arguments.length; _i++) { args[_i - 2] = arguments[_i]; } return setInterval.apply(void 0, __spreadArray([handler, timeout], __read(args))); }, clearInterval: function(handle) { return (clearInterval)(handle); }, delegate: void 0 }; // node_modules/rxjs/dist/esm5/internal/scheduler/AsyncAction.js var AsyncAction = function(_super) { __extends(AsyncAction2, _super); function AsyncAction2(scheduler, work) { var _this = _super.call(this, scheduler, work) || this; _this.scheduler = scheduler; _this.work = work; _this.pending = false; return _this; } AsyncAction2.prototype.schedule = function(state, delay2) { var _a; if (delay2 === void 0) { delay2 = 0; } if (this.closed) { return this; } this.state = state; var id = this.id; var scheduler = this.scheduler; if (id != null) { this.id = this.recycleAsyncId(scheduler, id, delay2); } this.pending = true; this.delay = delay2; this.id = (_a = this.id) !== null && _a !== void 0 ? _a : this.requestAsyncId(scheduler, this.id, delay2); return this; }; AsyncAction2.prototype.requestAsyncId = function(scheduler, _id, delay2) { if (delay2 === void 0) { delay2 = 0; } return intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay2); }; AsyncAction2.prototype.recycleAsyncId = function(_scheduler, id, delay2) { if (delay2 === void 0) { delay2 = 0; } if (delay2 != null && this.delay === delay2 && this.pending === false) { return id; } if (id != null) { intervalProvider.clearInterval(id); } return void 0; }; AsyncAction2.prototype.execute = function(state, delay2) { if (this.closed) { return new Error("executing a cancelled action"); } this.pending = false; var error = this._execute(state, delay2); if (error) { return error; } else if (this.pending === false && this.id != null) { this.id = this.recycleAsyncId(this.scheduler, this.id, null); } }; AsyncAction2.prototype._execute = function(state, _delay) { var errored = false; var errorValue; try { this.work(state); } catch (e) { errored = true; errorValue = e ? e : new Error("Scheduled action threw falsy error"); } if (errored) { this.unsubscribe(); return errorValue; } }; AsyncAction2.prototype.unsubscribe = function() { if (!this.closed) { var _a = this, id = _a.id, scheduler = _a.scheduler; var actions = scheduler.actions; this.work = this.state = this.scheduler = null; this.pending = false; arrRemove(actions, this); if (id != null) { this.id = this.recycleAsyncId(scheduler, id, null); } this.delay = null; _super.prototype.unsubscribe.call(this); } }; return AsyncAction2; }(Action); // node_modules/rxjs/dist/esm5/internal/Scheduler.js var Scheduler = function() { function Scheduler2(schedulerActionCtor, now) { if (now === void 0) { now = Scheduler2.now; } this.schedulerActionCtor = schedulerActionCtor; this.now = now; } Scheduler2.prototype.schedule = function(work, delay2, state) { if (delay2 === void 0) { delay2 = 0; } return new this.schedulerActionCtor(this, work).schedule(state, delay2); }; Scheduler2.now = dateTimestampProvider.now; return Scheduler2; }(); // node_modules/rxjs/dist/esm5/internal/scheduler/AsyncScheduler.js var AsyncScheduler = function(_super) { __extends(AsyncScheduler2, _super); function AsyncScheduler2(SchedulerAction, now) { if (now === void 0) { now = Scheduler.now; } var _this = _super.call(this, SchedulerAction, now) || this; _this.actions = []; _this._active = false; return _this; } AsyncScheduler2.prototype.flush = function(action) { var actions = this.actions; if (this._active) { actions.push(action); return; } var error; this._active = true; do { if (error = action.execute(action.state, action.delay)) { break; } } while (action = actions.shift()); this._active = false; if (error) { while (action = actions.shift()) { action.unsubscribe(); } throw error; } }; return AsyncScheduler2; }(Scheduler); // node_modules/rxjs/dist/esm5/internal/scheduler/async.js var asyncScheduler = new AsyncScheduler(AsyncAction); var async = asyncScheduler; // node_modules/rxjs/dist/esm5/internal/observable/empty.js var EMPTY = new Observable(function(subscriber) { return subscriber.complete(); }); // node_modules/rxjs/dist/esm5/internal/util/isScheduler.js function isScheduler(value) { return value && isFunction(value.schedule); } // node_modules/rxjs/dist/esm5/internal/util/args.js function last(arr) { return arr[arr.length - 1]; } function popResultSelector(args) { return isFunction(last(args)) ? args.pop() : void 0; } function popScheduler(args) { return isScheduler(last(args)) ? args.pop() : void 0; } function popNumber(args, defaultValue) { return typeof last(args) === "number" ? args.pop() : defaultValue; } // node_modules/rxjs/dist/esm5/internal/util/isArrayLike.js var isArrayLike = function(x) { return x && typeof x.length === "number" && typeof x !== "function"; }; // node_modules/rxjs/dist/esm5/internal/util/isPromise.js function isPromise(value) { return isFunction(value === null || value === void 0 ? void 0 : value.then); } // node_modules/rxjs/dist/esm5/internal/util/isInteropObservable.js function isInteropObservable(input) { return isFunction(input[observable]); } // node_modules/rxjs/dist/esm5/internal/util/isAsyncIterable.js function isAsyncIterable(obj) { return Symbol.asyncIterator && isFunction(obj === null || obj === void 0 ? void 0 : obj[Symbol.asyncIterator]); } // node_modules/rxjs/dist/esm5/internal/util/throwUnobservableError.js function createInvalidObservableTypeError(input) { return new TypeError("You provided " + (input !== null && typeof input === "object" ? "an invalid object" : "'" + input + "'") + " where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable."); } // node_modules/rxjs/dist/esm5/internal/symbol/iterator.js function getSymbolIterator() { if (typeof Symbol !== "function" || !Symbol.iterator) { return "@@iterator"; } return Symbol.iterator; } var iterator = getSymbolIterator(); // node_modules/rxjs/dist/esm5/internal/util/isIterable.js function isIterable(input) { return isFunction(input === null || input === void 0 ? void 0 : input[iterator]); } // node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js function readableStreamLikeToAsyncGenerator(readableStream) { return __asyncGenerator(this, arguments, function readableStreamLikeToAsyncGenerator_1() { var reader, _a, value, done; return __generator(this, function(_b) { switch (_b.label) { case 0: reader = readableStream.getReader(); _b.label = 1; case 1: _b.trys.push([1, , 9, 10]); _b.label = 2; case 2: return [4, __await(reader.read())]; case 3: _a = _b.sent(), value = _a.value, done = _a.done; if (!done) return [3, 5]; return [4, __await(void 0)]; case 4: return [2, _b.sent()]; case 5: return [4, __await(value)]; case 6: return [4, _b.sent()]; case 7: _b.sent(); return [3, 2]; case 8: return [3, 10]; case 9: reader.releaseLock(); return [7]; case 10: return [2]; } }); }); } function isReadableStreamLike(obj) { return isFunction(obj === null || obj === void 0 ? void 0 : obj.getReader); } // node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js function innerFrom(input) { if (input instanceof Observable) { return input; } if (input != null) { if (isInteropObservable(input)) { return fromInteropObservable(input); } if (isArrayLike(input)) { return fromArrayLike(input); } if (isPromise(input)) { return fromPromise(input); } if (isAsyncIterable(input)) { return fromAsyncIterable(input); } if (isIterable(input)) { return fromIterable(input); } if (isReadableStreamLike(input)) { return fromReadableStreamLike(input); } } throw createInvalidObservableTypeError(input); } function fromInteropObservable(obj) { return new Observable(function(subscriber) { var obs = obj[observable](); if (isFunction(obs.subscribe)) { return obs.subscribe(subscriber); } throw new TypeError("Provided object does not correctly implement Symbol.observable"); }); } function fromArrayLike(array) { return new Observable(function(subscriber) { for (var i = 0; i < array.length && !subscriber.closed; i++) { subscriber.next(array[i]); } subscriber.complete(); }); } function fromPromise(promise) { return new Observable(function(subscriber) { promise.then(function(value) { if (!subscriber.closed) { subscriber.next(value); subscriber.complete(); } }, function(err) { return subscriber.error(err); }).then(null, reportUnhandledError); }); } function fromIterable(iterable) { return new Observable(function(subscriber) { var e_1, _a; try { for (var iterable_1 = __values(iterable), iterable_1_1 = iterable_1.next(); !iterable_1_1.done; iterable_1_1 = iterable_1.next()) { var value = iterable_1_1.value; subscriber.next(value); if (subscriber.closed) { return; } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (iterable_1_1 && !iterable_1_1.done && (_a = iterable_1.return)) _a.call(iterable_1); } finally { if (e_1) throw e_1.error; } } subscriber.complete(); }); } function fromAsyncIterable(asyncIterable) { return new Observable(function(subscriber) { process$1(asyncIterable, subscriber).catch(function(err) { return subscriber.error(err); }); }); } function fromReadableStreamLike(readableStream) { return fromAsyncIterable(readableStreamLikeToAsyncGenerator(readableStream)); } function process$1(asyncIterable, subscriber) { var asyncIterable_1, asyncIterable_1_1; var e_2, _a; return __awaiter(this, void 0, void 0, function() { var value, e_2_1; return __generator(this, function(_b) { switch (_b.label) { case 0: _b.trys.push([0, 5, 6, 11]); asyncIterable_1 = __asyncValues(asyncIterable); _b.label = 1; case 1: return [4, asyncIterable_1.next()]; case 2: if (!(asyncIterable_1_1 = _b.sent(), !asyncIterable_1_1.done)) return [3, 4]; value = asyncIterable_1_1.value; subscriber.next(value); if (subscriber.closed) { return [2]; } _b.label = 3; case 3: return [3, 1]; case 4: return [3, 11]; case 5: e_2_1 = _b.sent(); e_2 = { error: e_2_1 }; return [3, 11]; case 6: _b.trys.push([6, , 9, 10]); if (!(asyncIterable_1_1 && !asyncIterable_1_1.done && (_a = asyncIterable_1.return))) return [3, 8]; return [4, _a.call(asyncIterable_1)]; case 7: _b.sent(); _b.label = 8; case 8: return [3, 10]; case 9: if (e_2) throw e_2.error; return [7]; case 10: return [7]; case 11: subscriber.complete(); return [2]; } }); }); } // node_modules/rxjs/dist/esm5/internal/util/executeSchedule.js function executeSchedule(parentSubscription, scheduler, work, delay2, repeat) { if (delay2 === void 0) { delay2 = 0; } if (repeat === void 0) { repeat = false; } var scheduleSubscription = scheduler.schedule(function() { work(); if (repeat) { parentSubscription.add(this.schedule(null, delay2)); } else { this.unsubscribe(); } }, delay2); parentSubscription.add(scheduleSubscription); if (!repeat) { return scheduleSubscription; } } // node_modules/rxjs/dist/esm5/internal/operators/observeOn.js function observeOn(scheduler, delay2) { if (delay2 === void 0) { delay2 = 0; } return operate(function(source, subscriber) { source.subscribe(createOperatorSubscriber(subscriber, function(value) { return executeSchedule(subscriber, scheduler, function() { return subscriber.next(value); }, delay2); }, function() { return executeSchedule(subscriber, scheduler, function() { return subscriber.complete(); }, delay2); }, function(err) { return executeSchedule(subscriber, scheduler, function() { return subscriber.error(err); }, delay2); })); }); } // node_modules/rxjs/dist/esm5/internal/operators/subscribeOn.js function subscribeOn(scheduler, delay2) { if (delay2 === void 0) { delay2 = 0; } return operate(function(source, subscriber) { subscriber.add(scheduler.schedule(function() { return source.subscribe(subscriber); }, delay2)); }); } // node_modules/rxjs/dist/esm5/internal/scheduled/scheduleObservable.js function scheduleObservable(input, scheduler) { return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler)); } // node_modules/rxjs/dist/esm5/internal/scheduled/schedulePromise.js function schedulePromise(input, scheduler) { return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler)); } // node_modules/rxjs/dist/esm5/internal/scheduled/scheduleArray.js function scheduleArray(input, scheduler) { return new Observable(function(subscriber) { var i = 0; return scheduler.schedule(function() { if (i === input.length) { subscriber.complete(); } else { subscriber.next(input[i++]); if (!subscriber.closed) { this.schedule(); } } }); }); } // node_modules/rxjs/dist/esm5/internal/scheduled/scheduleIterable.js function scheduleIterable(input, scheduler) { return new Observable(function(subscriber) { var iterator2; executeSchedule(subscriber, scheduler, function() { iterator2 = input[iterator](); executeSchedule(subscriber, scheduler, function() { var _a; var value; var done; try { _a = iterator2.next(), value = _a.value, done = _a.done; } catch (err) { subscriber.error(err); return; } if (done) { subscriber.complete(); } else { subscriber.next(value); } }, 0, true); }); return function() { return isFunction(iterator2 === null || iterator2 === void 0 ? void 0 : iterator2.return) && iterator2.return(); }; }); } // node_modules/rxjs/dist/esm5/internal/scheduled/scheduleAsyncIterable.js function scheduleAsyncIterable(input, scheduler) { if (!input) { throw new Error("Iterable cannot be null"); } return new Observable(function(subscriber) { executeSchedule(subscriber, scheduler, function() { var iterator2 = input[Symbol.asyncIterator](); executeSchedule(subscriber, scheduler, function() { iterator2.next().then(function(result) { if (result.done) { subscriber.complete(); } else { subscriber.next(result.value); } }); }, 0, true); }); }); } // node_modules/rxjs/dist/esm5/internal/scheduled/scheduleReadableStreamLike.js function scheduleReadableStreamLike(input, scheduler) { return scheduleAsyncIterable(readableStreamLikeToAsyncGenerator(input), scheduler); } // node_modules/rxjs/dist/esm5/internal/scheduled/scheduled.js function scheduled(input, scheduler) { if (input != null) { if (isInteropObservable(input)) { return scheduleObservable(input, scheduler); } if (isArrayLike(input)) { return scheduleArray(input, scheduler); } if (isPromise(input)) { return schedulePromise(input, scheduler); } if (isAsyncIterable(input)) { return scheduleAsyncIterable(input, scheduler); } if (isIterable(input)) { return scheduleIterable(input, scheduler); } if (isReadableStreamLike(input)) { return scheduleReadableStreamLike(input, scheduler); } } throw createInvalidObservableTypeError(input); } // node_modules/rxjs/dist/esm5/internal/observable/from.js function from(input, scheduler) { return scheduler ? scheduled(input, scheduler) : innerFrom(input); } // node_modules/rxjs/dist/esm5/internal/observable/of.js function of() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var scheduler = popScheduler(args); return from(args, scheduler); } // node_modules/rxjs/dist/esm5/internal/util/EmptyError.js var EmptyError = createErrorClass(function(_super) { return function EmptyErrorImpl() { _super(this); this.name = "EmptyError"; this.message = "no elements in sequence"; }; }); // node_modules/rxjs/dist/esm5/internal/lastValueFrom.js function lastValueFrom(source, config2) { var hasConfig = typeof config2 === "object"; return new Promise(function(resolve, reject) { var _hasValue = false; var _value; source.subscribe({ next: function(value) { _value = value; _hasValue = true; }, error: reject, complete: function() { if (_hasValue) { resolve(_value); } else if (hasConfig) { resolve(config2.defaultValue); } else { reject(new EmptyError()); } } }); }); } // node_modules/rxjs/dist/esm5/internal/firstValueFrom.js function firstValueFrom(source, config2) { var hasConfig = typeof config2 === "object"; return new Promise(function(resolve, reject) { var subscriber = new SafeSubscriber({ next: function(value) { resolve(value); subscriber.unsubscribe(); }, error: reject, complete: function() { if (hasConfig) { resolve(config2.defaultValue); } else { reject(new EmptyError()); } } }); source.subscribe(subscriber); }); } // node_modules/rxjs/dist/esm5/internal/util/isDate.js function isValidDate(value) { return value instanceof Date && !isNaN(value); } // node_modules/rxjs/dist/esm5/internal/operators/map.js function map(project, thisArg) { return operate(function(source, subscriber) { var index = 0; source.subscribe(createOperatorSubscriber(subscriber, function(value) { subscriber.next(project.call(thisArg, value, index++)); })); }); } // node_modules/rxjs/dist/esm5/internal/util/mapOneOrManyArgs.js var isArray = Array.isArray; function callOrApply(fn, args) { return isArray(args) ? fn.apply(void 0, __spreadArray([], __read(args))) : fn(args); } function mapOneOrManyArgs(fn) { return map(function(args) { return callOrApply(fn, args); }); } // node_modules/rxjs/dist/esm5/internal/util/argsArgArrayOrObject.js var isArray2 = Array.isArray; var getPrototypeOf = Object.getPrototypeOf; var objectProto = Object.prototype; var getKeys = Object.keys; function argsArgArrayOrObject(args) { if (args.length === 1) { var first_1 = args[0]; if (isArray2(first_1)) { return { args: first_1, keys: null }; } if (isPOJO(first_1)) { var keys = getKeys(first_1); return { args: keys.map(function(key) { return first_1[key]; }), keys }; } } return { args, keys: null }; } function isPOJO(obj) { return obj && typeof obj === "object" && getPrototypeOf(obj) === objectProto; } // node_modules/rxjs/dist/esm5/internal/util/createObject.js function createObject(keys, values) { return keys.reduce(function(result, key, i) { return result[key] = values[i], result; }, {}); } // node_modules/rxjs/dist/esm5/internal/observable/combineLatest.js function combineLatest() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var scheduler = popScheduler(args); var resultSelector = popResultSelector(args); var _a = argsArgArrayOrObject(args), observables = _a.args, keys = _a.keys; if (observables.length === 0) { return from([], scheduler); } var result = new Observable(combineLatestInit(observables, scheduler, keys ? function(values) { return createObject(keys, values); } : identity)); return resultSelector ? result.pipe(mapOneOrManyArgs(resultSelector)) : result; } function combineLatestInit(observables, scheduler, valueTransform) { if (valueTransform === void 0) { valueTransform = identity; } return function(subscriber) { maybeSchedule(scheduler, function() { var length = observables.length; var values = new Array(length); var active = length; var remainingFirstValues = length; var _loop_1 = function(i2) { maybeSchedule(scheduler, function() { var source = from(observables[i2], scheduler); var hasFirstValue = false; source.subscribe(createOperatorSubscriber(subscriber, function(value) { values[i2] = value; if (!hasFirstValue) { hasFirstValue = true; remainingFirstValues--; } if (!remainingFirstValues) { subscriber.next(valueTransform(values.slice())); } }, function() { if (!--active) { subscriber.complete(); } })); }, subscriber); }; for (var i = 0; i < length; i++) { _loop_1(i); } }, subscriber); }; } function maybeSchedule(scheduler, execute, subscription) { if (scheduler) { executeSchedule(subscription, scheduler, execute); } else { execute(); } } // node_modules/rxjs/dist/esm5/internal/operators/mergeInternals.js function mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand, innerSubScheduler, additionalFinalizer) { var buffer = []; var active = 0; var index = 0; var isComplete = false; var checkComplete = function() { if (isComplete && !buffer.length && !active) { subscriber.complete(); } }; var outerNext = function(value) { return active < concurrent ? doInnerSub(value) : buffer.push(value); }; var doInnerSub = function(value) { expand && subscriber.next(value); active++; var innerComplete = false; innerFrom(project(value, index++)).subscribe(createOperatorSubscriber(subscriber, function(innerValue) { onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue); if (expand) { outerNext(innerValue); } else { subscriber.next(innerValue); } }, function() { innerComplete = true; }, void 0, function() { if (innerComplete) { try { active--; var _loop_1 = function() { var bufferedValue = buffer.shift(); if (innerSubScheduler) { executeSchedule(subscriber, innerSubScheduler, function() { return doInnerSub(bufferedValue); }); } else { doInnerSub(bufferedValue); } }; while (buffer.length && active < concurrent) { _loop_1(); } checkComplete(); } catch (err) { subscriber.error(err); } } })); }; source.subscribe(createOperatorSubscriber(subscriber, outerNext, function() { isComplete = true; checkComplete(); })); return function() { additionalFinalizer === null || additionalFinalizer === void 0 ? void 0 : additionalFinalizer(); }; } // node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js function mergeMap(project, resultSelector, concurrent) { if (concurrent === void 0) { concurrent = Infinity; } if (isFunction(resultSelector)) { return mergeMap(function(a, i) { return map(function(b, ii) { return resultSelector(a, b, i, ii); })(innerFrom(project(a, i))); }, concurrent); } else if (typeof resultSelector === "number") { concurrent = resultSelector; } return operate(function(source, subscriber) { return mergeInternals(source, subscriber, project, concurrent); }); } // node_modules/rxjs/dist/esm5/internal/operators/mergeAll.js function mergeAll(concurrent) { if (concurrent === void 0) { concurrent = Infinity; } return mergeMap(identity, concurrent); } // node_modules/rxjs/dist/esm5/internal/operators/concatAll.js function concatAll() { return mergeAll(1); } // node_modules/rxjs/dist/esm5/internal/observable/concat.js function concat() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return concatAll()(from(args, popScheduler(args))); } // node_modules/rxjs/dist/esm5/internal/observable/defer.js function defer(observableFactory) { return new Observable(function(subscriber) { innerFrom(observableFactory()).subscribe(subscriber); }); } // node_modules/rxjs/dist/esm5/internal/observable/fromEvent.js var nodeEventEmitterMethods = ["addListener", "removeListener"]; var eventTargetMethods = ["addEventListener", "removeEventListener"]; var jqueryMethods = ["on", "off"]; function fromEvent(target, eventName, options, resultSelector) { if (isFunction(options)) { resultSelector = options; options = void 0; } if (resultSelector) { return fromEvent(target, eventName, options).pipe(mapOneOrManyArgs(resultSelector)); } var _a = __read(isEventTarget(target) ? eventTargetMethods.map(function(methodName) { return function(handler) { return target[methodName](eventName, handler, options); }; }) : isNodeStyleEventEmitter(target) ? nodeEventEmitterMethods.map(toCommonHandlerRegistry(target, eventName)) : isJQueryStyleEventEmitter(target) ? jqueryMethods.map(toCommonHandlerRegistry(target, eventName)) : [], 2), add = _a[0], remove = _a[1]; if (!add) { if (isArrayLike(target)) { return mergeMap(function(subTarget) { return fromEvent(subTarget, eventName, options); })(innerFrom(target)); } } if (!add) { throw new TypeError("Invalid event target"); } return new Observable(function(subscriber) { var handler = function() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return subscriber.next(1 < args.length ? args : args[0]); }; add(handler); return function() { return remove(handler); }; }); } function toCommonHandlerRegistry(target, eventName) { return function(methodName) { return function(handler) { return target[methodName](eventName, handler); }; }; } function isNodeStyleEventEmitter(target) { return isFunction(target.addListener) && isFunction(target.removeListener); } function isJQueryStyleEventEmitter(target) { return isFunction(target.on) && isFunction(target.off); } function isEventTarget(target) { return isFunction(target.addEventListener) && isFunction(target.removeEventListener); } // node_modules/rxjs/dist/esm5/internal/observable/timer.js function timer(dueTime, intervalOrScheduler, scheduler) { if (dueTime === void 0) { dueTime = 0; } if (scheduler === void 0) { scheduler = async; } var intervalDuration = -1; if (intervalOrScheduler != null) { if (isScheduler(intervalOrScheduler)) { scheduler = intervalOrScheduler; } else { intervalDuration = intervalOrScheduler; } } return new Observable(function(subscriber) { var due = isValidDate(dueTime) ? +dueTime - scheduler.now() : dueTime; if (due < 0) { due = 0; } var n = 0; return scheduler.schedule(function() { if (!subscriber.closed) { subscriber.next(n++); if (0 <= intervalDuration) { this.schedule(void 0, intervalDuration); } else { subscriber.complete(); } } }, due); }); } // node_modules/rxjs/dist/esm5/internal/observable/merge.js function merge() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var scheduler = popScheduler(args); var concurrent = popNumber(args, Infinity); var sources = args; return !sources.length ? EMPTY : sources.length === 1 ? innerFrom(sources[0]) : mergeAll(concurrent)(from(sources, scheduler)); } // node_modules/rxjs/dist/esm5/internal/observable/never.js var NEVER = new Observable(noop); // node_modules/rxjs/dist/esm5/internal/util/argsOrArgArray.js var isArray3 = Array.isArray; function argsOrArgArray(args) { return args.length === 1 && isArray3(args[0]) ? args[0] : args; } // node_modules/rxjs/dist/esm5/internal/operators/filter.js function filter(predicate, thisArg) { return operate(function(source, subscriber) { var index = 0; source.subscribe(createOperatorSubscriber(subscriber, function(value) { return predicate.call(thisArg, value, index++) && subscriber.next(value); })); }); } // node_modules/rxjs/dist/esm5/internal/observable/race.js function race() { var sources = []; for (var _i = 0; _i < arguments.length; _i++) { sources[_i] = arguments[_i]; } sources = argsOrArgArray(sources); return sources.length === 1 ? innerFrom(sources[0]) : new Observable(raceInit(sources)); } function raceInit(sources) { return function(subscriber) { var subscriptions = []; var _loop_1 = function(i2) { subscriptions.push(innerFrom(sources[i2]).subscribe(createOperatorSubscriber(subscriber, function(value) { if (subscriptions) { for (var s = 0; s < subscriptions.length; s++) { s !== i2 && subscriptions[s].unsubscribe(); } subscriptions = null; } subscriber.next(value); }))); }; for (var i = 0; subscriptions && !subscriber.closed && i < sources.length; i++) { _loop_1(i); } }; } // node_modules/rxjs/dist/esm5/internal/operators/bufferCount.js function bufferCount(bufferSize, startBufferEvery) { if (startBufferEvery === void 0) { startBufferEvery = null; } startBufferEvery = startBufferEvery !== null && startBufferEvery !== void 0 ? startBufferEvery : bufferSize; return operate(function(source, subscriber) { var buffers = []; var count = 0; source.subscribe(createOperatorSubscriber(subscriber, function(value) { var e_1, _a, e_2, _b; var toEmit = null; if (count++ % startBufferEvery === 0) { buffers.push([]); } try { for (var buffers_1 = __values(buffers), buffers_1_1 = buffers_1.next(); !buffers_1_1.done; buffers_1_1 = buffers_1.next()) { var buffer = buffers_1_1.value; buffer.push(value); if (bufferSize <= buffer.length) { toEmit = toEmit !== null && toEmit !== void 0 ? toEmit : []; toEmit.push(buffer); } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (buffers_1_1 && !buffers_1_1.done && (_a = buffers_1.return)) _a.call(buffers_1); } finally { if (e_1) throw e_1.error; } } if (toEmit) { try { for (var toEmit_1 = __values(toEmit), toEmit_1_1 = toEmit_1.next(); !toEmit_1_1.done; toEmit_1_1 = toEmit_1.next()) { var buffer = toEmit_1_1.value; arrRemove(buffers, buffer); subscriber.next(buffer); } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (toEmit_1_1 && !toEmit_1_1.done && (_b = toEmit_1.return)) _b.call(toEmit_1); } finally { if (e_2) throw e_2.error; } } } }, function() { var e_3, _a; try { for (var buffers_2 = __values(buffers), buffers_2_1 = buffers_2.next(); !buffers_2_1.done; buffers_2_1 = buffers_2.next()) { var buffer = buffers_2_1.value; subscriber.next(buffer); } } catch (e_3_1) { e_3 = { error: e_3_1 }; } finally { try { if (buffers_2_1 && !buffers_2_1.done && (_a = buffers_2.return)) _a.call(buffers_2); } finally { if (e_3) throw e_3.error; } } subscriber.complete(); }, void 0, function() { buffers = null; })); }); } // node_modules/rxjs/dist/esm5/internal/operators/catchError.js function catchError(selector) { return operate(function(source, subscriber) { var innerSub = null; var syncUnsub = false; var handledResult; innerSub = source.subscribe(createOperatorSubscriber(subscriber, void 0, void 0, function(err) { handledResult = innerFrom(selector(err, catchError(selector)(source))); if (innerSub) { innerSub.unsubscribe(); innerSub = null; handledResult.subscribe(subscriber); } else { syncUnsub = true; } })); if (syncUnsub) { innerSub.unsubscribe(); innerSub = null; handledResult.subscribe(subscriber); } }); } // node_modules/rxjs/dist/esm5/internal/operators/concatMap.js function concatMap(project, resultSelector) { return isFunction(resultSelector) ? mergeMap(project, resultSelector, 1) : mergeMap(project, 1); } // node_modules/rxjs/dist/esm5/internal/operators/defaultIfEmpty.js function defaultIfEmpty(defaultValue) { return operate(function(source, subscriber) { var hasValue = false; source.subscribe(createOperatorSubscriber(subscriber, function(value) { hasValue = true; subscriber.next(value); }, function() { if (!hasValue) { subscriber.next(defaultValue); } subscriber.complete(); })); }); } // node_modules/rxjs/dist/esm5/internal/operators/take.js function take(count) { return count <= 0 ? function() { return EMPTY; } : operate(function(source, subscriber) { var seen = 0; source.subscribe(createOperatorSubscriber(subscriber, function(value) { if (++seen <= count) { subscriber.next(value); if (count <= seen) { subscriber.complete(); } } })); }); } // node_modules/rxjs/dist/esm5/internal/operators/ignoreElements.js function ignoreElements() { return operate(function(source, subscriber) { source.subscribe(createOperatorSubscriber(subscriber, noop)); }); } // node_modules/rxjs/dist/esm5/internal/operators/mapTo.js function mapTo(value) { return map(function() { return value; }); } // node_modules/rxjs/dist/esm5/internal/operators/delayWhen.js function delayWhen(delayDurationSelector, subscriptionDelay) { if (subscriptionDelay) { return function(source) { return concat(subscriptionDelay.pipe(take(1), ignoreElements()), source.pipe(delayWhen(delayDurationSelector))); }; } return mergeMap(function(value, index) { return innerFrom(delayDurationSelector(value, index)).pipe(take(1), mapTo(value)); }); } // node_modules/rxjs/dist/esm5/internal/operators/throwIfEmpty.js function throwIfEmpty(errorFactory) { if (errorFactory === void 0) { errorFactory = defaultErrorFactory; } return operate(function(source, subscriber) { var hasValue = false; source.subscribe(createOperatorSubscriber(subscriber, function(value) { hasValue = true; subscriber.next(value); }, function() { return hasValue ? subscriber.complete() : subscriber.error(errorFactory()); })); }); } function defaultErrorFactory() { return new EmptyError(); } // node_modules/rxjs/dist/esm5/internal/operators/first.js function first(predicate, defaultValue) { var hasDefaultValue = arguments.length >= 2; return function(source) { return source.pipe(predicate ? filter(function(v, i) { return predicate(v, i, source); }) : identity, take(1), hasDefaultValue ? defaultIfEmpty(defaultValue) : throwIfEmpty(function() { return new EmptyError(); })); }; } // node_modules/rxjs/dist/esm5/internal/operators/mergeScan.js function mergeScan(accumulator, seed, concurrent) { if (concurrent === void 0) { concurrent = Infinity; } return operate(function(source, subscriber) { var state = seed; return mergeInternals(source, subscriber, function(value, index) { return accumulator(state, value, index); }, concurrent, function(value) { state = value; }, false, void 0, function() { return state = null; }); }); } // node_modules/rxjs/dist/esm5/internal/operators/raceWith.js function raceWith() { var otherSources = []; for (var _i = 0; _i < arguments.length; _i++) { otherSources[_i] = arguments[_i]; } return !otherSources.length ? identity : operate(function(source, subscriber) { raceInit(__spreadArray([source], __read(otherSources)))(subscriber); }); } // node_modules/rxjs/dist/esm5/internal/operators/retry.js function retry(configOrCount) { if (configOrCount === void 0) { configOrCount = Infinity; } var config2; if (configOrCount && typeof configOrCount === "object") { config2 = configOrCount; } else { config2 = { count: configOrCount }; } var _a = config2.count, count = _a === void 0 ? Infinity : _a, delay2 = config2.delay, _b = config2.resetOnSuccess, resetOnSuccess = _b === void 0 ? false : _b; return count <= 0 ? identity : operate(function(source, subscriber) { var soFar = 0; var innerSub; var subscribeForRetry = function() { var syncUnsub = false; innerSub = source.subscribe(createOperatorSubscriber(subscriber, function(value) { if (resetOnSuccess) { soFar = 0; } subscriber.next(value); }, void 0, function(err) { if (soFar++ < count) { var resub_1 = function() { if (innerSub) { innerSub.unsubscribe(); innerSub = null; subscribeForRetry(); } else { syncUnsub = true; } }; if (delay2 != null) { var notifier = typeof delay2 === "number" ? timer(delay2) : innerFrom(delay2(err, soFar)); var notifierSubscriber_1 = createOperatorSubscriber(subscriber, function() { notifierSubscriber_1.unsubscribe(); resub_1(); }, function() { subscriber.complete(); }); notifier.subscribe(notifierSubscriber_1); } else { resub_1(); } } else { subscriber.error(err); } })); if (syncUnsub) { innerSub.unsubscribe(); innerSub = null; subscribeForRetry(); } }; subscribeForRetry(); }); } // node_modules/rxjs/dist/esm5/internal/operators/startWith.js function startWith() { var values = []; for (var _i = 0; _i < arguments.length; _i++) { values[_i] = arguments[_i]; } var scheduler = popScheduler(values); return operate(function(source, subscriber) { (scheduler ? concat(values, source, scheduler) : concat(values, source)).subscribe(subscriber); }); } // node_modules/rxjs/dist/esm5/internal/operators/switchMap.js function switchMap(project, resultSelector) { return operate(function(source, subscriber) { var innerSubscriber = null; var index = 0; var isComplete = false; var checkComplete = function() { return isComplete && !innerSubscriber && subscriber.complete(); }; source.subscribe(createOperatorSubscriber(subscriber, function(value) { innerSubscriber === null || innerSubscriber === void 0 ? void 0 : innerSubscriber.unsubscribe(); var innerIndex = 0; var outerIndex = index++; innerFrom(project(value, outerIndex)).subscribe(innerSubscriber = createOperatorSubscriber(subscriber, function(innerValue) { return subscriber.next(resultSelector ? resultSelector(value, innerValue, outerIndex, innerIndex++) : innerValue); }, function() { innerSubscriber = null; checkComplete(); })); }, function() { isComplete = true; checkComplete(); })); }); } // node_modules/rxjs/dist/esm5/internal/operators/takeUntil.js function takeUntil(notifier) { return operate(function(source, subscriber) { innerFrom(notifier).subscribe(createOperatorSubscriber(subscriber, function() { return subscriber.complete(); }, noop)); !subscriber.closed && source.subscribe(subscriber); }); } // node_modules/rxjs/dist/esm5/internal/operators/tap.js function tap(observerOrNext, error, complete) { var tapObserver = isFunction(observerOrNext) || error || complete ? { next: observerOrNext, error, complete } : observerOrNext; return tapObserver ? operate(function(source, subscriber) { var _a; (_a = tapObserver.subscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver); var isUnsub = true; source.subscribe(createOperatorSubscriber(subscriber, function(value) { var _a2; (_a2 = tapObserver.next) === null || _a2 === void 0 ? void 0 : _a2.call(tapObserver, value); subscriber.next(value); }, function() { var _a2; isUnsub = false; (_a2 = tapObserver.complete) === null || _a2 === void 0 ? void 0 : _a2.call(tapObserver); subscriber.complete(); }, function(err) { var _a2; isUnsub = false; (_a2 = tapObserver.error) === null || _a2 === void 0 ? void 0 : _a2.call(tapObserver, err); subscriber.error(err); }, function() { var _a2, _b; if (isUnsub) { (_a2 = tapObserver.unsubscribe) === null || _a2 === void 0 ? void 0 : _a2.call(tapObserver); } (_b = tapObserver.finalize) === null || _b === void 0 ? void 0 : _b.call(tapObserver); })); }) : identity; } /** MIT License Copyright (c) 2021 Jason Miller Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ // ../../node_modules/mitt/dist/mitt.mjs function mitt_default(n) { return { all: n = n || /* @__PURE__ */ new Map(), on: function(t, e) { var i = n.get(t); i ? i.push(e) : n.set(t, [e]); }, off: function(t, e) { var i = n.get(t); i && (e ? i.splice(i.indexOf(e) >>> 0, 1) : n.set(t, [])); }, emit: function(t, e) { var i = n.get(t); i && i.slice().map(function(n2) { n2(e); }), (i = n.get("*")) && i.slice().map(function(n2) { n2(t, e); }); } }; } /** * @license * Copyright 2023 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ Symbol.dispose ??= Symbol('dispose'); Symbol.asyncDispose ??= Symbol('asyncDispose'); /** * @internal */ const disposeSymbol = Symbol.dispose; /** * @internal */ const asyncDisposeSymbol = Symbol.asyncDispose; /** * @internal */ class DisposableStack { #disposed = false; #stack = []; /** * Returns a value indicating whether this stack has been disposed. */ get disposed() { return this.#disposed; } /** * Disposes each resource in the stack in the reverse order that they were added. */ dispose() { if (this.#disposed) { return; } this.#disposed = true; for (const resource of this.#stack.reverse()) { resource[disposeSymbol](); } } /** * Adds a disposable resource to the stack, returning the resource. * * @param value - The resource to add. `null` and `undefined` will not be added, * but will be returned. * @returns The provided `value`. */ use(value) { if (value) { this.#stack.push(value); } return value; } /** * Adds a value and associated disposal callback as a resource to the stack. * * @param value - The value to add. * @param onDispose - The callback to use in place of a `[disposeSymbol]()` * method. Will be invoked with `value` as the first parameter. * @returns The provided `value`. */ adopt(value, onDispose) { this.#stack.push({ [disposeSymbol]() { onDispose(value); }, }); return value; } /** * Adds a callback to be invoked when the stack is disposed. */ defer(onDispose) { this.#stack.push({ [disposeSymbol]() { onDispose(); }, }); } /** * Move all resources out of this stack and into a new `DisposableStack`, and * marks this stack as disposed. * * @example * * ```ts * class C { * #res1: Disposable; * #res2: Disposable; * #disposables: DisposableStack; * constructor() { * // stack will be disposed when exiting constructor for any reason * using stack = new DisposableStack(); * * // get first resource * this.#res1 = stack.use(getResource1()); * * // get second resource. If this fails, both `stack` and `#res1` will be disposed. * this.#res2 = stack.use(getResource2()); * * // all operations succeeded, move resources out of `stack` so that * // they aren't disposed when constructor exits * this.#disposables = stack.move(); * } * * [disposeSymbol]() { * this.#disposables.dispose(); * } * } * ``` */ move() { if (this.#disposed) { throw new ReferenceError('a disposed stack can not use anything new'); // step 3 } const stack = new DisposableStack(); // step 4-5 stack.#stack = this.#stack; this.#disposed = true; return stack; } [disposeSymbol] = this.dispose; [Symbol.toStringTag] = 'DisposableStack'; } /** * @internal */ class AsyncDisposableStack { #disposed = false; #stack = []; /** * Returns a value indicating whether this stack has been disposed. */ get disposed() { return this.#disposed; } /** * Disposes each resource in the stack in the reverse order that they were added. */ async dispose() { if (this.#disposed) { return; } this.#disposed = true; for (const resource of this.#stack.reverse()) { await resource[asyncDisposeSymbol](); } } /** * Adds a disposable resource to the stack, returning the resource. * * @param value - The resource to add. `null` and `undefined` will not be added, * but will be returned. * @returns The provided `value`. */ use(value) { if (value) { this.#stack.push(value); } return value; } /** * Adds a value and associated disposal callback as a resource to the stack. * * @param value - The value to add. * @param onDispose - The callback to use in place of a `[disposeSymbol]()` * method. Will be invoked with `value` as the first parameter. * @returns The provided `value`. */ adopt(value, onDispose) { this.#stack.push({ [asyncDisposeSymbol]() { return onDispose(value); }, }); return value; } /** * Adds a callback to be invoked when the stack is disposed. */ defer(onDispose) { this.#stack.push({ [asyncDisposeSymbol]() { return onDispose(); }, }); } /** * Move all resources out of this stack and into a new `DisposableStack`, and * marks this stack as disposed. * * @example * * ```ts * class C { * #res1: Disposable; * #res2: Disposable; * #disposables: DisposableStack; * constructor() { * // stack will be disposed when exiting constructor for any reason * using stack = new DisposableStack(); * * // get first resource * this.#res1 = stack.use(getResource1()); * * // get second resource. If this fails, both `stack` and `#res1` will be disposed. * this.#res2 = stack.use(getResource2()); * * // all operations succeeded, move resources out of `stack` so that * // they aren't disposed when constructor exits * this.#disposables = stack.move(); * } * * [disposeSymbol]() { * this.#disposables.dispose(); * } * } * ``` */ move() { if (this.#disposed) { throw new ReferenceError('a disposed stack can not use anything new'); // step 3 } const stack = new AsyncDisposableStack(); // step 4-5 stack.#stack = this.#stack; this.#disposed = true; return stack; } [asyncDisposeSymbol] = this.dispose; [Symbol.toStringTag] = 'AsyncDisposableStack'; } /** * @license * Copyright 2022 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ /** * The EventEmitter class that many Puppeteer classes extend. * * @remarks * * This allows you to listen to events that Puppeteer classes fire and act * accordingly. Therefore you'll mostly use {@link EventEmitter.on | on} and * {@link EventEmitter.off | off} to bind * and unbind to event listeners. * * @public */ class EventEmitter { #emitter; #handlers = new Map(); /** * If you pass an emitter, the returned emitter will wrap the passed emitter. * * @internal */ constructor(emitter = mitt_default(new Map())) { this.#emitter = emitter; } /** * Bind an event listener to fire when an event occurs. * @param type - the event type you'd like to listen to. Can be a string or symbol. * @param handler - the function to be called when the event occurs. * @returns `this` to enable you to chain method calls. */ on(type, handler) { const handlers = this.#handlers.get(type); if (handlers === undefined) { this.#handlers.set(type, [handler]); } else { handlers.push(handler); } this.#emitter.on(type, handler); return this; } /** * Remove an event listener from firing. * @param type - the event type you'd like to stop listening to. * @param handler - the function that should be removed. * @returns `this` to enable you to chain method calls. */ off(type, handler) { const handlers = this.#handlers.get(type) ?? []; if (handler === undefined) { for (const handler of handlers) { this.#emitter.off(type, handler); } this.#handlers.delete(type); return this; } const index = handlers.lastIndexOf(handler); if (index > -1) { this.#emitter.off(type, ...handlers.splice(index, 1)); } return this; } /** * Emit an event and call any associated listeners. * * @param type - the event you'd like to emit * @param eventData - any data you'd like to emit with the event * @returns `true` if there are any listeners, `false` if there are not. */ emit(type, event) { this.#emitter.emit(type, event); return this.listenerCount(type) > 0; } /** * Like `on` but the listener will only be fired once and then it will be removed. * @param type - the event you'd like to listen to * @param handler - the handler function to run when the event occurs * @returns `this` to enable you to chain method calls. */ once(type, handler) { const onceHandler = eventData => { handler(eventData); this.off(type, onceHandler); }; return this.on(type, onceHandler); } /** * Gets the number of listeners for a given event. * * @param type - the event to get the listener count for * @returns the number of listeners bound to the given event */ listenerCount(type) { return this.#handlers.get(type)?.length || 0; } /** * Removes all listeners. If given an event argument, it will remove only * listeners for that event. * * @param type - the event to remove listeners for. * @returns `this` to enable you to chain method calls. */ removeAllListeners(type) { if (type !== undefined) { return this.off(type); } this[disposeSymbol](); return this; } /** * @internal */ [disposeSymbol]() { for (const [type, handlers] of this.#handlers) { for (const handler of handlers) { this.#emitter.off(type, handler); } } this.#handlers.clear(); } } /** * @license * Copyright 2020 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ /** * Asserts that the given value is truthy. * @param value - some conditional statement * @param message - the error message to throw if the value is not truthy. * * @internal */ const assert = (value, message) => { if (!value) { throw new Error(message); } }; /** * @license * Copyright 2020 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ /** * @internal */ const isNode = !!(typeof process !== 'undefined' && process.version); /** * @license * Copyright 2020 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ /** * @internal */ let debugModule = null; /** * @internal */ async function importDebug() { if (!debugModule) { debugModule = (await import('debug')).default; } return debugModule; } /** * A debug function that can be used in any environment. * * @remarks * If used in Node, it falls back to the * {@link https://www.npmjs.com/package/debug | debug module}. In the browser it * uses `console.log`. * * In Node, use the `DEBUG` environment variable to control logging: * * ``` * DEBUG=* // logs all channels * DEBUG=foo // logs the `foo` channel * DEBUG=foo* // logs any channels starting with `foo` * ``` * * In the browser, set `window.__PUPPETEER_DEBUG` to a string: * * ``` * window.__PUPPETEER_DEBUG='*'; // logs all channels * window.__PUPPETEER_DEBUG='foo'; // logs the `foo` channel * window.__PUPPETEER_DEBUG='foo*'; // logs any channels starting with `foo` * ``` * * @example * * ``` * const log = debug('Page'); * * log('new page created') * // logs "Page: new page created" * ``` * * @param prefix - this will be prefixed to each log. * @returns a function that can be called to log to that debug channel. * * @internal */ const debug = (prefix) => { if (isNode) { return async (...logArgs) => { (await importDebug())(prefix)(logArgs); }; } return (...logArgs) => { const debugLevel = globalThis.__PUPPETEER_DEBUG; if (!debugLevel) { return; } const everythingShouldBeLogged = debugLevel === '*'; const prefixMatchesDebugLevel = everythingShouldBeLogged || /** * If the debug level is `foo*`, that means we match any prefix that * starts with `foo`. If the level is `foo`, we match only the prefix * `foo`. */ (debugLevel.endsWith('*') ? prefix.startsWith(debugLevel) : prefix === debugLevel); if (!prefixMatchesDebugLevel) { return; } // eslint-disable-next-line no-console console.log(`${prefix}:`, ...logArgs); }; }; /** * @license * Copyright 2018 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ /** * The base class for all Puppeteer-specific errors * * @public */ class PuppeteerError extends Error { /** * @internal */ constructor(message, options) { super(message, options); this.name = this.constructor.name; } /** * @internal */ get [Symbol.toStringTag]() { return this.constructor.name; } } /** * TimeoutError is emitted whenever certain operations are terminated due to * timeout. * * @remarks * Example operations are {@link Page.waitForSelector | page.waitForSelector} or * {@link PuppeteerNode.launch | puppeteer.launch}. * * @public */ class TimeoutError extends PuppeteerError { } /** * ProtocolError is emitted whenever there is an error from the protocol. * * @public */ class ProtocolError extends PuppeteerError { #code; #originalMessage = ''; set code(code) { this.#code = code; } /** * @readonly * @public */ get code() { return this.#code; } set originalMessage(originalMessage) { this.#originalMessage = originalMessage; } /** * @readonly * @public */ get originalMessage() { return this.#originalMessage; } } /** * Puppeteer will throw this error if a method is not * supported by the currently used protocol * * @public */ class UnsupportedOperation extends PuppeteerError { } /** * @internal */ class TargetCloseError extends ProtocolError { } /** * @license * Copyright 2020 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ /** * @internal */ const paperFormats = { letter: { width: 8.5, height: 11 }, legal: { width: 8.5, height: 14 }, tabloid: { width: 11, height: 17 }, ledger: { width: 17, height: 11 }, a0: { width: 33.1, height: 46.8 }, a1: { width: 23.4, height: 33.1 }, a2: { width: 16.54, height: 23.4 }, a3: { width: 11.7, height: 16.54 }, a4: { width: 8.27, height: 11.7 }, a5: { width: 5.83, height: 8.27 }, a6: { width: 4.13, height: 5.83 }, }; /** * @license * Copyright 2017 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ /** * @internal */ const debugError = debug('puppeteer:error'); /** * @internal */ const DEFAULT_VIEWPORT = Object.freeze({ width: 800, height: 600 }); /** * @internal */ const SOURCE_URL = Symbol('Source URL for Puppeteer evaluation scripts'); /** * @internal */ class PuppeteerURL { static INTERNAL_URL = 'pptr:internal'; static fromCallSite(functionName, site) { const url = new PuppeteerURL(); url.#functionName = functionName; url.#siteString = site.toString(); return url; } static parse = (url) => { url = url.slice('pptr:'.length); const [functionName = '', siteString = ''] = url.split(';'); const puppeteerUrl = new PuppeteerURL(); puppeteerUrl.#functionName = functionName; puppeteerUrl.#siteString = decodeURIComponent(siteString); return puppeteerUrl; }; static isPuppeteerURL = (url) => { return url.startsWith('pptr:'); }; #functionName; #siteString; get functionName() { return this.#functionName; } get siteString() { return this.#siteString; } toString() { return `pptr:${[ this.#functionName, encodeURIComponent(this.#siteString), ].join(';')}`; } } /** * @internal */ const withSourcePuppeteerURLIfNone = (functionName, object) => { if (Object.prototype.hasOwnProperty.call(object, SOURCE_URL)) { return object; } const original = Error.prepareStackTrace; Error.prepareStackTrace = (_, stack) => { // First element is the function. // Second element is the caller of this function. // Third element is the caller of the caller of this function // which is precisely what we want. return stack[2]; }; const site = new Error().stack; Error.prepareStackTrace = original; return Object.assign(object, { [SOURCE_URL]: PuppeteerURL.fromCallSite(functionName, site), }); }; /** * @internal */ const getSourcePuppeteerURLIfAvailable = (object) => { if (Object.prototype.hasOwnProperty.call(object, SOURCE_URL)) { return object[SOURCE_URL]; } return undefined; }; /** * @internal */ const isString = (obj) => { return typeof obj === 'string' || obj instanceof String; }; /** * @internal */ const isNumber = (obj) => { return typeof obj === 'number' || obj instanceof Number; }; /** * @internal */ const isPlainObject = (obj) => { return typeof obj === 'object' && obj?.constructor === Object; }; /** * @internal */ const isRegExp = (obj) => { return typeof obj === 'object' && obj?.constructor === RegExp; }; /** * @internal */ const isDate = (obj) => { return typeof obj === 'object' && obj?.constructor === Date; }; /** * @internal */ function evaluationString(fun, ...args) { if (isString(fun)) { assert(args.length === 0, 'Cannot evaluate a string with arguments'); return fun; } function serializeArgument(arg) { if (Object.is(arg, undefined)) { return 'undefined'; } return JSON.stringify(arg); } return `(${fun})(${args.map(serializeArgument).join(',')})`; } /** * @internal */ let fs = null; /** * @internal */ async function importFSPromises() { if (!fs) { try { fs = await import('fs/promises'); } catch (error) { if (error instanceof TypeError) { throw new Error('Cannot write to a path outside of a Node-like environment.'); } throw error; } } return fs; } /** * @internal */ async function getReadableAsBuffer(readable, path) { const buffers = []; const reader = readable.getReader(); if (path) { const fs = await importFSPromises(); const fileHandle = await fs.open(path, 'w+'); try { while (true) { const { done, value } = await reader.read(); if (done) { break; } buffers.push(value); await fileHandle.writeFile(value); } } finally { await fileHandle.close(); } } else { while (true) { const { done, value } = await reader.read(); if (done) { break; } buffers.push(value); } } try { return Buffer.concat(buffers); } catch (error) { debugError(error); return null; } } /** * @internal */ /** * @internal */ async function getReadableFromProtocolStream(client, handle) { return new ReadableStream({ async pull(controller) { function getUnit8Array(data, isBase64) { if (isBase64) { return Uint8Array.from(atob(data), m => { return m.codePointAt(0); }); } const encoder = new TextEncoder(); return encoder.encode(data); } const { data, base64Encoded, eof } = await client.send('IO.read', { handle, }); controller.enqueue(getUnit8Array(data, base64Encoded ?? false)); if (eof) { await client.send('IO.close', { handle }); controller.close(); } }, }); } /** * @internal */ function validateDialogType(type) { let dialogType = null; const validDialogTypes = new Set([ 'alert', 'confirm', 'prompt', 'beforeunload', ]); if (validDialogTypes.has(type)) { dialogType = type; } assert(dialogType, `Unknown javascript dialog type: ${type}`); return dialogType; } /** * @internal */ function timeout(ms, cause) { return ms === 0 ? NEVER : timer(ms).pipe(map(() => { throw new TimeoutError(`Timed out after waiting ${ms}ms`, { cause }); })); } /** * @internal */ const UTILITY_WORLD_NAME = '__puppeteer_utility_world__'; /** * @internal */ const SOURCE_URL_REGEX = /^[\040\t]*\/\/[@#] sourceURL=\s*(\S*?)\s*$/m; /** * @internal */ function getSourceUrlComment(url) { return `//# sourceURL=${url}`; } /** * @internal */ const NETWORK_IDLE_TIME = 500; /** * @internal */ function parsePDFOptions(options = {}, lengthUnit = 'in') { const defaults = { scale: 1, displayHeaderFooter: false, headerTemplate: '', footerTemplate: '', printBackground: false, landscape: false, pageRanges: '', preferCSSPageSize: false, omitBackground: false, outline: false, tagged: true, }; let width = 8.5; let height = 11; if (options.format) { const format = paperFormats[options.format.toLowerCase()]; assert(format, 'Unknown paper format: ' + options.format); width = format.width; height = format.height; } else { width = convertPrintParameterToInches(options.width, lengthUnit) ?? width; height = convertPrintParameterToInches(options.height, lengthUnit) ?? height; } const margin = { top: convertPrintParameterToInches(options.margin?.top, lengthUnit) || 0, left: convertPrintParameterToInches(options.margin?.left, lengthUnit) || 0, bottom: convertPrintParameterToInches(options.margin?.bottom, lengthUnit) || 0, right: convertPrintParameterToInches(options.margin?.right, lengthUnit) || 0, }; // Quirk https://bugs.chromium.org/p/chromium/issues/detail?id=840455#c44 if (options.outline) { options.tagged = true; } return { ...defaults, ...options, width, height, margin, }; } /** * @internal */ const unitToPixels = { px: 1, in: 96, cm: 37.8, mm: 3.78, }; function convertPrintParameterToInches(parameter, lengthUnit = 'in') { if (typeof parameter === 'undefined') { return undefined; } let pixels; if (isNumber(parameter)) { // Treat numbers as pixel values to be aligned with phantom's paperSize. pixels = parameter; } else if (isString(parameter)) { const text = parameter; let unit = text.substring(text.length - 2).toLowerCase(); let valueText = ''; if (unit in unitToPixels) { valueText = text.substring(0, text.length - 2); } else { // In case of unknown unit try to parse the whole parameter as number of pixels. // This is consistent with phantom's paperSize behavior. unit = 'px'; valueText = text; } const value = Number(valueText); assert(!isNaN(value), 'Failed to parse parameter value: ' + text); pixels = value * unitToPixels[unit]; } else { throw new Error('page.pdf() Cannot handle parameter type: ' + typeof parameter); } return pixels / unitToPixels[lengthUnit]; } /** * @internal */ function fromEmitterEvent(emitter, eventName) { return new Observable(subscriber => { const listener = (event) => { subscriber.next(event); }; emitter.on(eventName, listener); return () => { emitter.off(eventName, listener); }; }); } /** * @internal */ function filterAsync(predicate) { return mergeMap((value) => { return from(Promise.resolve(predicate(value))).pipe(filter(isMatch => { return isMatch; }), map(() => { return value; })); }); } /** * @license * Copyright 2017 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ /** * @internal */ const WEB_PERMISSION_TO_PROTOCOL_PERMISSION = new Map([ ['geolocation', 'geolocation'], ['midi', 'midi'], ['notifications', 'notifications'], // TODO: push isn't a valid type? // ['push', 'push'], ['camera', 'videoCapture'], ['microphone', 'audioCapture'], ['background-sync', 'backgroundSync'], ['ambient-light-sensor', 'sensors'], ['accelerometer', 'sensors'], ['gyroscope', 'sensors'], ['magnetometer', 'sensors'], ['accessibility-events', 'accessibilityEvents'], ['clipboard-read', 'clipboardReadWrite'], ['clipboard-write', 'clipboardReadWrite'], ['clipboard-sanitized-write', 'clipboardSanitizedWrite'], ['payment-handler', 'paymentHandler'], ['persistent-storage', 'durableStorage'], ['idle-detection', 'idleDetection'], // chrome-specific permissions we have. ['midi-sysex', 'midiSysex'], ]); /** * {@link Browser} represents a browser instance that is either: * * - connected to via {@link Puppeteer.connect} or * - launched by {@link PuppeteerNode.launch}. * * {@link Browser} {@link EventEmitter.emit | emits} various events which are * documented in the {@link BrowserEvent} enum. * * @example Using a {@link Browser} to create a {@link Page}: * * ```ts * import puppeteer from 'puppeteer'; * * const browser = await puppeteer.launch(); * const page = await browser.newPage(); * await page.goto('https://example.com'); * await browser.close(); * ``` * * @example Disconnecting from and reconnecting to a {@link Browser}: * * ```ts * import puppeteer from 'puppeteer'; * * const browser = await puppeteer.launch(); * // Store the endpoint to be able to reconnect to the browser. * const browserWSEndpoint = browser.wsEndpoint(); * // Disconnect puppeteer from the browser. * await browser.disconnect(); * * // Use the endpoint to reestablish a connection * const browser2 = await puppeteer.connect({browserWSEndpoint}); * // Close the browser. * await browser2.close(); * ``` * * @public */ class Browser extends EventEmitter { /** * @internal */ constructor() { super(); } /** * Waits until a {@link Target | target} matching the given `predicate` * appears and returns it. * * This will look all open {@link BrowserContext | browser contexts}. * * @example Finding a target for a page opened via `window.open`: * * ```ts * await page.evaluate(() => window.open('https://www.example.com/')); * const newWindowTarget = await browser.waitForTarget( * target => target.url() === 'https://www.example.com/' * ); * ``` */ async waitForTarget(predicate, options = {}) { const { timeout: ms = 30000 } = options; return await firstValueFrom(merge(fromEmitterEvent(this, "targetcreated" /* BrowserEvent.TargetCreated */), fromEmitterEvent(this, "targetchanged" /* BrowserEvent.TargetChanged */), from(this.targets())).pipe(filterAsync(predicate), raceWith(timeout(ms)))); } /** * Gets a list of all open {@link Page | pages} inside this {@link Browser}. * * If there ar multiple {@link BrowserContext | browser contexts}, this * returns all {@link Page | pages} in all * {@link BrowserContext | browser contexts}. * * @remarks Non-visible {@link Page | pages}, such as `"background_page"`, * will not be listed here. You can find them using {@link Target.page}. */ async pages() { const contextPages = await Promise.all(this.browserContexts().map(context => { return context.pages(); })); // Flatten array. return contextPages.reduce((acc, x) => { return acc.concat(x); }, []); } /** * Whether Puppeteer is connected to this {@link Browser | browser}. * * @deprecated Use {@link Browser | Browser.connected}. */ isConnected() { return this.connected; } /** @internal */ [disposeSymbol]() { return void this.close().catch(debugError); } /** @internal */ [asyncDisposeSymbol]() { return this.close(); } } /** * @license * Copyright 2017 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ /** * {@link BrowserContext} represents individual user contexts within a * {@link Browser | browser}. * * When a {@link Browser | browser} is launched, it has a single * {@link BrowserContext | browser context} by default. Others can be created * using {@link Browser.createBrowserContext}. Each context has isolated storage * (cookies/localStorage/etc.) * * {@link BrowserContext} {@link EventEmitter | emits} various events which are * documented in the {@link BrowserContextEvent} enum. * * If a {@link Page | page} opens another {@link Page | page}, e.g. using * `window.open`, the popup will belong to the parent {@link Page.browserContext * | page's browser context}. * * @example Creating a new {@link BrowserContext | browser context}: * * ```ts * // Create a new browser context * const context = await browser.createBrowserContext(); * // Create a new page inside context. * const page = await context.newPage(); * // ... do stuff with page ... * await page.goto('https://example.com'); * // Dispose context once it's no longer needed. * await context.close(); * ``` * * @public */ class BrowserContext extends EventEmitter { /** * @internal */ constructor() { super(); } /** * Waits until a {@link Target | target} matching the given `predicate` * appears and returns it. * * This will look all open {@link BrowserContext | browser contexts}. * * @example Finding a target for a page opened via `window.open`: * * ```ts * await page.evaluate(() => window.open('https://www.example.com/')); * const newWindowTarget = await browserContext.waitForTarget( * target => target.url() === 'https://www.example.com/' * ); * ``` */ async waitForTarget(predicate, options = {}) { const { timeout: ms = 30000 } = options; return await firstValueFrom(merge(fromEmitterEvent(this, "targetcreated" /* BrowserContextEvent.TargetCreated */), fromEmitterEvent(this, "targetchanged" /* BrowserContextEvent.TargetChanged */), from(this.targets())).pipe(filterAsync(predicate), raceWith(timeout(ms)))); } /** * Whether this {@link BrowserContext | browser context} is closed. */ get closed() { return !this.browser().browserContexts().includes(this); } /** * Identifier for this {@link BrowserContext | browser context}. */ get id() { return undefined; } /** @internal */ [disposeSymbol]() { return void this.close().catch(debugError); } /** @internal */ [asyncDisposeSymbol]() { return this.close(); } } /** * Events that the CDPSession class emits. * * @public */ // eslint-disable-next-line @typescript-eslint/no-namespace var CDPSessionEvent; (function (CDPSessionEvent) { /** @internal */ CDPSessionEvent.Disconnected = Symbol('CDPSession.Disconnected'); /** @internal */ CDPSessionEvent.Swapped = Symbol('CDPSession.Swapped'); /** * Emitted when the session is ready to be configured during the auto-attach * process. Right after the event is handled, the session will be resumed. * * @internal */ CDPSessionEvent.Ready = Symbol('CDPSession.Ready'); CDPSessionEvent.SessionAttached = 'sessionattached'; CDPSessionEvent.SessionDetached = 'sessiondetached'; })(CDPSessionEvent || (CDPSessionEvent = {})); /** * The `CDPSession` instances are used to talk raw Chrome Devtools Protocol. * * @remarks * * Protocol methods can be called with {@link CDPSession.send} method and protocol * events can be subscribed to with `CDPSession.on` method. * * Useful links: {@link https://chromedevtools.github.io/devtools-protocol/ | DevTools Protocol Viewer} * and {@link https://github.com/aslushnikov/getting-started-with-cdp/blob/HEAD/README.md | Getting Started with DevTools Protocol}. * * @example * * ```ts * const client = await page.createCDPSession(); * await client.send('Animation.enable'); * client.on('Animation.animationCreated', () => * console.log('Animation created!') * ); * const response = await client.send('Animation.getPlaybackRate'); * console.log('playback rate is ' + response.playbackRate); * await client.send('Animation.setPlaybackRate', { * playbackRate: response.playbackRate / 2, * }); * ``` * * @public */ class CDPSession extends EventEmitter { /** * @internal */ constructor() { super(); } /** * Parent session in terms of CDP's auto-attach mechanism. * * @internal */ parentSession() { return undefined; } } /** * @license * Copyright 2017 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ /** * Dialog instances are dispatched by the {@link Page} via the `dialog` event. * * @remarks * * @example * * ```ts * import puppeteer from 'puppeteer'; * * (async () => { * const browser = await puppeteer.launch(); * const page = await browser.newPage(); * page.on('dialog', async dialog => { * console.log(dialog.message()); * await dialog.dismiss(); * await browser.close(); * }); * page.evaluate(() => alert('1')); * })(); * ``` * * @public */ class Dialog { #type; #message; #defaultValue; #handled = false; /** * @internal */ constructor(type, message, defaultValue = '') { this.#type = type; this.#message = message; this.#defaultValue = defaultValue; } /** * The type of the dialog. */ type() { return this.#type; } /** * The message displayed in the dialog. */ message() { return this.#message; } /** * The default value of the prompt, or an empty string if the dialog * is not a `prompt`. */ defaultValue() { return this.#defaultValue; } /** * A promise that resolves when the dialog has been accepted. * * @param promptText - optional text that will be entered in the dialog * prompt. Has no effect if the dialog's type is not `prompt`. * */ async accept(promptText) { assert(!this.#handled, 'Cannot accept dialog which is already handled!'); this.#handled = true; await this.handle({ accept: true, text: promptText, }); } /** * A promise which will resolve once the dialog has been dismissed */ async dismiss() { assert(!this.#handled, 'Cannot dismiss dialog which is already handled!'); this.#handled = true; await this.handle({ accept: false, }); } } /** * @license * Copyright 2023 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ /** * @internal */ const _isElementHandle = Symbol('_isElementHandle'); /** * @license * Copyright 2022 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ /** * @internal */ function isErrorLike(obj) { return (typeof obj === 'object' && obj !== null && 'name' in obj && 'message' in obj); } /** * @internal */ function rewriteError$1(error, message, originalMessage) { error.message = message; error.originalMessage = originalMessage ?? error.originalMessage; return error; } /** * @internal */ function createProtocolErrorMessage(object) { let message = object.error.message; // TODO: remove the type checks when we stop connecting to BiDi with a CDP // client. if (object.error && typeof object.error === 'object' && 'data' in object.error) { message += ` ${object.error.data}`; } return message; } /** * @license * Copyright 2023 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ const createdFunctions = new Map(); /** * Creates a function from a string. * * @internal */ const createFunction = (functionValue) => { let fn = createdFunctions.get(functionValue); if (fn) { return fn; } fn = new Function(`return ${functionValue}`)(); createdFunctions.set(functionValue, fn); return fn; }; /** * @internal */ function stringifyFunction(fn) { let value = fn.toString(); try { new Function(`(${value})`); } catch { // This means we might have a function shorthand (e.g. `test(){}`). Let's // try prefixing. let prefix = 'function '; if (value.startsWith('async ')) { prefix = `async ${prefix}`; value = value.substring('async '.length); } value = `${prefix}${value}`; try { new Function(`(${value})`); } catch { // We tried hard to serialize, but there's a weird beast here. throw new Error('Passed function cannot be serialized!'); } } return value; } /** * Replaces `PLACEHOLDER`s with the given replacements. * * All replacements must be valid JS code. * * @example * * ```ts * interpolateFunction(() => PLACEHOLDER('test'), {test: 'void 0'}); * // Equivalent to () => void 0 * ``` * * @internal */ const interpolateFunction = (fn, replacements) => { let value = stringifyFunction(fn); for (const [name, jsValue] of Object.entries(replacements)) { value = value.replace(new RegExp(`PLACEHOLDER\\(\\s*(?:'${name}'|"${name}")\\s*\\)`, 'g'), // Wrapping this ensures tersers that accidentally inline PLACEHOLDER calls // are still valid. Without, we may get calls like ()=>{...}() which is // not valid. `(${jsValue})`); } return createFunction(value); }; /** * @license * Copyright 2023 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ var __addDisposableResource$a = (undefined && undefined.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); dispose = value[Symbol.asyncDispose]; } if (dispose === void 0) { if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined."); dispose = value[Symbol.dispose]; } if (typeof dispose !== "function") throw new TypeError("Object not disposable."); env.stack.push({ value: value, dispose: dispose, async: async }); } else if (async) { env.stack.push({ async: true }); } return value; }; var __disposeResources$a = (undefined && undefined.__disposeResources) || (function (SuppressedError) { return function (env) { function fail(e) { env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e; env.hasError = true; } function next() { while (env.stack.length) { var rec = env.stack.pop(); try { var result = rec.dispose && rec.dispose.call(rec.value); if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); }); } catch (e) { fail(e); } } if (env.hasError) throw env.error; } return next(); }; })(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { var e = new Error(message); return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; }); const DEFAULT_BATCH_SIZE = 20; /** * This will transpose an iterator JSHandle into a fast, Puppeteer-side iterator * of JSHandles. * * @param size - The number of elements to transpose. This should be something * reasonable. */ async function* fastTransposeIteratorHandle(iterator, size) { const env_1 = { stack: [], error: void 0, hasError: false }; try { const array = __addDisposableResource$a(env_1, await iterator.evaluateHandle(async (iterator, size) => { const results = []; while (results.length < size) { const result = await iterator.next(); if (result.done) { break; } results.push(result.value); } return results; }, size), false); const properties = (await array.getProperties()); const handles = properties.values(); const stack = __addDisposableResource$a(env_1, new DisposableStack(), false); stack.defer(() => { for (const handle_1 of handles) { const env_2 = { stack: [], error: void 0, hasError: false }; try { const handle = __addDisposableResource$a(env_2, handle_1, false); handle[disposeSymbol](); } catch (e_2) { env_2.error = e_2; env_2.hasError = true; } finally { __disposeResources$a(env_2); } } }); yield* handles; return properties.size === 0; } catch (e_1) { env_1.error = e_1; env_1.hasError = true; } finally { __disposeResources$a(env_1); } } /** * This will transpose an iterator JSHandle in batches based on the default size * of {@link fastTransposeIteratorHandle}. */ async function* transposeIteratorHandle(iterator) { let size = DEFAULT_BATCH_SIZE; while (!(yield* fastTransposeIteratorHandle(iterator, size))) { size <<= 1; } } /** * @internal */ async function* transposeIterableHandle(handle) { const env_3 = { stack: [], error: void 0, hasError: false }; try { const generatorHandle = __addDisposableResource$a(env_3, await handle.evaluateHandle(iterable => { return (async function* () { yield* iterable; })(); }), false); yield* transposeIteratorHandle(generatorHandle); } catch (e_3) { env_3.error = e_3; env_3.hasError = true; } finally { __disposeResources$a(env_3); } } /** * @license * Copyright 2022 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ /** * @internal */ class LazyArg { static create = (get) => { // We don't want to introduce LazyArg to the type system, otherwise we would // have to make it public. return new LazyArg(get); }; #get; constructor(get) { this.#get = get; } async get(context) { return await this.#get(context); } } /** * @license * Copyright 2023 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ var __addDisposableResource$9 = (undefined && undefined.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); dispose = value[Symbol.asyncDispose]; } if (dispose === void 0) { if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined."); dispose = value[Symbol.dispose]; } if (typeof dispose !== "function") throw new TypeError("Object not disposable."); env.stack.push({ value: value, dispose: dispose, async: async }); } else if (async) { env.stack.push({ async: true }); } return value; }; var __disposeResources$9 = (undefined && undefined.__disposeResources) || (function (SuppressedError) { return function (env) { function fail(e) { env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e; env.hasError = true; } function next() { while (env.stack.length) { var rec = env.stack.pop(); try { var result = rec.dispose && rec.dispose.call(rec.value); if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); }); } catch (e) { fail(e); } } if (env.hasError) throw env.error; } return next(); }; })(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { var e = new Error(message); return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; }); /** * @internal */ class QueryHandler { // Either one of these may be implemented, but at least one must be. static querySelectorAll; static querySelector; static get _querySelector() { if (this.querySelector) { return this.querySelector; } if (!this.querySelectorAll) { throw new Error('Cannot create default `querySelector`.'); } return (this.querySelector = interpolateFunction(async (node, selector, PuppeteerUtil) => { const querySelectorAll = PLACEHOLDER('querySelectorAll'); const results = querySelectorAll(node, selector, PuppeteerUtil); for await (const result of results) { return result; } return null; }, { querySelectorAll: stringifyFunction(this.querySelectorAll), })); } static get _querySelectorAll() { if (this.querySelectorAll) { return this.querySelectorAll; } if (!this.querySelector) { throw new Error('Cannot create default `querySelectorAll`.'); } return (this.querySelectorAll = interpolateFunction(async function* (node, selector, PuppeteerUtil) { const querySelector = PLACEHOLDER('querySelector'); const result = await querySelector(node, selector, PuppeteerUtil); if (result) { yield result; } }, { querySelector: stringifyFunction(this.querySelector), })); } /** * Queries for multiple nodes given a selector and {@link ElementHandle}. * * Akin to {@link https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll | Document.querySelectorAll()}. */ static async *queryAll(element, selector) { const env_1 = { stack: [], error: void 0, hasError: false }; try { const handle = __addDisposableResource$9(env_1, await element.evaluateHandle(this._querySelectorAll, selector, LazyArg.create(context => { return context.puppeteerUtil; })), false); yield* transposeIterableHandle(handle); } catch (e_1) { env_1.error = e_1; env_1.hasError = true; } finally { __disposeResources$9(env_1); } } /** * Queries for a single node given a selector and {@link ElementHandle}. * * Akin to {@link https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector}. */ static async queryOne(element, selector) { const env_2 = { stack: [], error: void 0, hasError: false }; try { const result = __addDisposableResource$9(env_2, await element.evaluateHandle(this._querySelector, selector, LazyArg.create(context => { return context.puppeteerUtil; })), false); if (!(_isElementHandle in result)) { return null; } return result.move(); } catch (e_2) { env_2.error = e_2; env_2.hasError = true; } finally { __disposeResources$9(env_2); } } /** * Waits until a single node appears for a given selector and * {@link ElementHandle}. * * This will always query the handle in the Puppeteer world and migrate the * result to the main world. */ static async waitFor(elementOrFrame, selector, options) { const env_3 = { stack: [], error: void 0, hasError: false }; try { let frame; const element = __addDisposableResource$9(env_3, await (async () => { if (!(_isElementHandle in elementOrFrame)) { frame = elementOrFrame; return; } frame = elementOrFrame.frame; return await frame.isolatedRealm().adoptHandle(elementOrFrame); })(), false); const { visible = false, hidden = false, timeout, signal } = options; try { const env_4 = { stack: [], error: void 0, hasError: false }; try { signal?.throwIfAborted(); const handle = __addDisposableResource$9(env_4, await frame.isolatedRealm().waitForFunction(async (PuppeteerUtil, query, selector, root, visible) => { const querySelector = PuppeteerUtil.createFunction(query); const node = await querySelector(root ?? document, selector, PuppeteerUtil); return PuppeteerUtil.checkVisibility(node, visible); }, { polling: visible || hidden ? 'raf' : 'mutation', root: element, timeout, signal, }, LazyArg.create(context => { return context.puppeteerUtil; }), stringifyFunction(this._querySelector), selector, element, visible ? true : hidden ? false : undefined), false); if (signal?.aborted) { throw signal.reason; } if (!(_isElementHandle in handle)) { return null; } return await frame.mainRealm().transferHandle(handle); } catch (e_3) { env_4.error = e_3; env_4.hasError = true; } finally { __disposeResources$9(env_4); } } catch (error) { if (!isErrorLike(error)) { throw error; } if (error.name === 'AbortError') { throw error; } error.message = `Waiting for selector \`${selector}\` failed: ${error.message}`; throw error; } } catch (e_4) { env_3.error = e_4; env_3.hasError = true; } finally { __disposeResources$9(env_3); } } } /** * @internal */ class AsyncIterableUtil { static async *map(iterable, map) { for await (const value of iterable) { yield await map(value); } } static async *flatMap(iterable, map) { for await (const value of iterable) { yield* map(value); } } static async collect(iterable) { const result = []; for await (const value of iterable) { result.push(value); } return result; } static async first(iterable) { for await (const value of iterable) { return value; } return; } } /** * @license * Copyright 2020 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ const isKnownAttribute = (attribute) => { return ['name', 'role'].includes(attribute); }; const normalizeValue = (value) => { return value.replace(/ +/g, ' ').trim(); }; /** * The selectors consist of an accessible name to query for and optionally * further aria attributes on the form `[=]`. * Currently, we only support the `name` and `role` attribute. * The following examples showcase how the syntax works wrt. querying: * * - 'title[role="heading"]' queries for elements with name 'title' and role 'heading'. * - '[role="image"]' queries for elements with role 'image' and any name. * - 'label' queries for elements with name 'label' and any role. * - '[name=""][role="button"]' queries for elements with no name and role 'button'. */ const ATTRIBUTE_REGEXP = /\[\s*(?\w+)\s*=\s*(?"|')(?\\.|.*?(?=\k))\k\s*\]/g; const parseARIASelector = (selector) => { const queryOptions = {}; const defaultName = selector.replace(ATTRIBUTE_REGEXP, (_, attribute, __, value) => { attribute = attribute.trim(); assert(isKnownAttribute(attribute), `Unknown aria attribute "${attribute}" in selector`); queryOptions[attribute] = normalizeValue(value); return ''; }); if (defaultName && !queryOptions.name) { queryOptions.name = normalizeValue(defaultName); } return queryOptions; }; /** * @internal */ class ARIAQueryHandler extends QueryHandler { static querySelector = async (node, selector, { ariaQuerySelector }) => { return await ariaQuerySelector(node, selector); }; static async *queryAll(element, selector) { const { name, role } = parseARIASelector(selector); yield* element.queryAXTree(name, role); } static queryOne = async (element, selector) => { return ((await AsyncIterableUtil.first(this.queryAll(element, selector))) ?? null); }; } /** * JavaScript code that provides the puppeteer utilities. See the * [README](https://github.com/puppeteer/puppeteer/blob/main/src/injected/README.md) * for injection for more information. * * @internal */ const source = "\"use strict\";var v=Object.defineProperty;var re=Object.getOwnPropertyDescriptor;var ne=Object.getOwnPropertyNames;var oe=Object.prototype.hasOwnProperty;var u=(t,e)=>{for(var n in e)v(t,n,{get:e[n],enumerable:!0})},se=(t,e,n,r)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let o of ne(e))!oe.call(t,o)&&o!==n&&v(t,o,{get:()=>e[o],enumerable:!(r=re(e,o))||r.enumerable});return t};var ie=t=>se(v({},\"__esModule\",{value:!0}),t);var Re={};u(Re,{default:()=>ke});module.exports=ie(Re);var C=class extends Error{constructor(e,n){super(e,n),this.name=this.constructor.name}get[Symbol.toStringTag](){return this.constructor.name}},b=class extends C{};var f=class t{static create(e){return new t(e)}static async race(e){let n=new Set;try{let r=e.map(o=>o instanceof t?(o.#s&&n.add(o),o.valueOrThrow()):o);return await Promise.race(r)}finally{for(let r of n)r.reject(new Error(\"Timeout cleared\"))}}#e=!1;#r=!1;#n;#t;#o=new Promise(e=>{this.#t=e});#s;#l;constructor(e){e&&e.timeout>0&&(this.#l=new b(e.message),this.#s=setTimeout(()=>{this.reject(this.#l)},e.timeout))}#a(e){clearTimeout(this.#s),this.#n=e,this.#t()}resolve(e){this.#r||this.#e||(this.#e=!0,this.#a(e))}reject(e){this.#r||this.#e||(this.#r=!0,this.#a(e))}resolved(){return this.#e}finished(){return this.#e||this.#r}value(){return this.#n}#i;valueOrThrow(){return this.#i||(this.#i=(async()=>{if(await this.#o,this.#r)throw this.#n;return this.#n})()),this.#i}};var X=new Map,z=t=>{let e=X.get(t);return e||(e=new Function(`return ${t}`)(),X.set(t,e),e)};var k={};u(k,{ariaQuerySelector:()=>le,ariaQuerySelectorAll:()=>I});var le=(t,e)=>window.__ariaQuerySelector(t,e),I=async function*(t,e){yield*await window.__ariaQuerySelectorAll(t,e)};var M={};u(M,{customQuerySelectors:()=>O});var R=class{#e=new Map;register(e,n){if(!n.queryOne&&n.queryAll){let r=n.queryAll;n.queryOne=(o,i)=>{for(let s of r(o,i))return s;return null}}else if(n.queryOne&&!n.queryAll){let r=n.queryOne;n.queryAll=(o,i)=>{let s=r(o,i);return s?[s]:[]}}else if(!n.queryOne||!n.queryAll)throw new Error(\"At least one query method must be defined.\");this.#e.set(e,{querySelector:n.queryOne,querySelectorAll:n.queryAll})}unregister(e){this.#e.delete(e)}get(e){return this.#e.get(e)}clear(){this.#e.clear()}},O=new R;var q={};u(q,{pierceQuerySelector:()=>ae,pierceQuerySelectorAll:()=>ce});var ae=(t,e)=>{let n=null,r=o=>{let i=document.createTreeWalker(o,NodeFilter.SHOW_ELEMENT);do{let s=i.currentNode;s.shadowRoot&&r(s.shadowRoot),!(s instanceof ShadowRoot)&&s!==o&&!n&&s.matches(e)&&(n=s)}while(!n&&i.nextNode())};return t instanceof Document&&(t=t.documentElement),r(t),n},ce=(t,e)=>{let n=[],r=o=>{let i=document.createTreeWalker(o,NodeFilter.SHOW_ELEMENT);do{let s=i.currentNode;s.shadowRoot&&r(s.shadowRoot),!(s instanceof ShadowRoot)&&s!==o&&s.matches(e)&&n.push(s)}while(i.nextNode())};return t instanceof Document&&(t=t.documentElement),r(t),n};var m=(t,e)=>{if(!t)throw new Error(e)};var T=class{#e;#r;#n;#t;constructor(e,n){this.#e=e,this.#r=n}async start(){let e=this.#t=f.create(),n=await this.#e();if(n){e.resolve(n);return}this.#n=new MutationObserver(async()=>{let r=await this.#e();r&&(e.resolve(r),await this.stop())}),this.#n.observe(this.#r,{childList:!0,subtree:!0,attributes:!0})}async stop(){m(this.#t,\"Polling never started.\"),this.#t.finished()||this.#t.reject(new Error(\"Polling stopped\")),this.#n&&(this.#n.disconnect(),this.#n=void 0)}result(){return m(this.#t,\"Polling never started.\"),this.#t.valueOrThrow()}},E=class{#e;#r;constructor(e){this.#e=e}async start(){let e=this.#r=f.create(),n=await this.#e();if(n){e.resolve(n);return}let r=async()=>{if(e.finished())return;let o=await this.#e();if(!o){window.requestAnimationFrame(r);return}e.resolve(o),await this.stop()};window.requestAnimationFrame(r)}async stop(){m(this.#r,\"Polling never started.\"),this.#r.finished()||this.#r.reject(new Error(\"Polling stopped\"))}result(){return m(this.#r,\"Polling never started.\"),this.#r.valueOrThrow()}},P=class{#e;#r;#n;#t;constructor(e,n){this.#e=e,this.#r=n}async start(){let e=this.#t=f.create(),n=await this.#e();if(n){e.resolve(n);return}this.#n=setInterval(async()=>{let r=await this.#e();r&&(e.resolve(r),await this.stop())},this.#r)}async stop(){m(this.#t,\"Polling never started.\"),this.#t.finished()||this.#t.reject(new Error(\"Polling stopped\")),this.#n&&(clearInterval(this.#n),this.#n=void 0)}result(){return m(this.#t,\"Polling never started.\"),this.#t.valueOrThrow()}};var V={};u(V,{pQuerySelector:()=>Ce,pQuerySelectorAll:()=>te});var c=class{static async*map(e,n){for await(let r of e)yield await n(r)}static async*flatMap(e,n){for await(let r of e)yield*n(r)}static async collect(e){let n=[];for await(let r of e)n.push(r);return n}static async first(e){for await(let n of e)return n}};var p={attribute:/\\[\\s*(?:(?\\*|[-\\w\\P{ASCII}]*)\\|)?(?[-\\w\\P{ASCII}]+)\\s*(?:(?\\W?=)\\s*(?.+?)\\s*(\\s(?[iIsS]))?\\s*)?\\]/gu,id:/#(?[-\\w\\P{ASCII}]+)/gu,class:/\\.(?[-\\w\\P{ASCII}]+)/gu,comma:/\\s*,\\s*/g,combinator:/\\s*[\\s>+~]\\s*/g,\"pseudo-element\":/::(?[-\\w\\P{ASCII}]+)(?:\\((?¶*)\\))?/gu,\"pseudo-class\":/:(?[-\\w\\P{ASCII}]+)(?:\\((?¶*)\\))?/gu,universal:/(?:(?\\*|[-\\w\\P{ASCII}]*)\\|)?\\*/gu,type:/(?:(?\\*|[-\\w\\P{ASCII}]*)\\|)?(?[-\\w\\P{ASCII}]+)/gu},ue=new Set([\"combinator\",\"comma\"]);var fe=t=>{switch(t){case\"pseudo-element\":case\"pseudo-class\":return new RegExp(p[t].source.replace(\"(?\\xB6*)\",\"(?.*)\"),\"gu\");default:return p[t]}};function de(t,e){let n=0,r=\"\";for(;e(n.push({value:i,offset:s}),\"\\uE000\".repeat(i.length))),t=t.replace(he,(i,s,l,a)=>(n.push({value:i,offset:a}),`${s}${\"\\uE001\".repeat(l.length)}${s}`));{let i=0,s;for(;(s=t.indexOf(\"(\",i))>-1;){let l=de(t,s);n.push({value:l,offset:s}),t=`${t.substring(0,s)}(${\"\\xB6\".repeat(l.length-2)})${t.substring(s+l.length)}`,i=s+l.length}}let r=me(t,e),o=new Set;for(let i of n.reverse())for(let s of r){let{offset:l,value:a}=i;if(!(s.pos[0]<=l&&l+a.length<=s.pos[1]))continue;let{content:h}=s,d=l-s.pos[0];s.content=h.slice(0,d)+a+h.slice(d+a.length),s.content!==h&&o.add(s)}for(let i of o){let s=fe(i.type);if(!s)throw new Error(`Unknown token type: ${i.type}`);s.lastIndex=0;let l=s.exec(i.content);if(!l)throw new Error(`Unable to parse content for ${i.type}: ${i.content}`);Object.assign(i,l.groups)}return r}function*x(t,e){switch(t.type){case\"list\":for(let n of t.list)yield*x(n,t);break;case\"complex\":yield*x(t.left,t),yield*x(t.right,t);break;case\"compound\":yield*t.list.map(n=>[n,t]);break;default:yield[t,e]}}function y(t){let e;return Array.isArray(t)?e=t:e=[...x(t)].map(([n])=>n),e.map(n=>n.content).join(\"\")}p.combinator=/\\s*(>>>>?|[\\s>+~])\\s*/g;var ye=/\\\\[\\s\\S]/g,ge=t=>t.length<=1?t:((t[0]==='\"'||t[0]===\"'\")&&t.endsWith(t[0])&&(t=t.slice(1,-1)),t.replace(ye,e=>e[1]));function K(t){let e=!0,n=G(t);if(n.length===0)return[[],e];let r=[],o=[r],i=[o],s=[];for(let l of n){switch(l.type){case\"combinator\":switch(l.content){case\">>>\":e=!1,s.length&&(r.push(y(s)),s.splice(0)),r=[],o.push(\">>>\"),o.push(r);continue;case\">>>>\":e=!1,s.length&&(r.push(y(s)),s.splice(0)),r=[],o.push(\">>>>\"),o.push(r);continue}break;case\"pseudo-element\":if(!l.name.startsWith(\"-p-\"))break;e=!1,s.length&&(r.push(y(s)),s.splice(0)),r.push({name:l.name.slice(3),value:ge(l.argument??\"\")});continue;case\"comma\":s.length&&(r.push(y(s)),s.splice(0)),r=[],o=[r],i.push(o);continue}s.push(l)}return s.length&&r.push(y(s)),[i,e]}var _={};u(_,{textQuerySelectorAll:()=>S});var we=new Set([\"checkbox\",\"image\",\"radio\"]),Se=t=>t instanceof HTMLSelectElement||t instanceof HTMLTextAreaElement||t instanceof HTMLInputElement&&!we.has(t.type),be=new Set([\"SCRIPT\",\"STYLE\"]),w=t=>!be.has(t.nodeName)&&!document.head?.contains(t),D=new WeakMap,J=t=>{for(;t;)D.delete(t),t instanceof ShadowRoot?t=t.host:t=t.parentNode},Y=new WeakSet,Te=new MutationObserver(t=>{for(let e of t)J(e.target)}),g=t=>{let e=D.get(t);if(e||(e={full:\"\",immediate:[]},!w(t)))return e;let n=\"\";if(Se(t))e.full=t.value,e.immediate.push(t.value),t.addEventListener(\"input\",r=>{J(r.target)},{once:!0,capture:!0});else{for(let r=t.firstChild;r;r=r.nextSibling){if(r.nodeType===Node.TEXT_NODE){e.full+=r.nodeValue??\"\",n+=r.nodeValue??\"\";continue}n&&e.immediate.push(n),n=\"\",r.nodeType===Node.ELEMENT_NODE&&(e.full+=g(r).full)}n&&e.immediate.push(n),t instanceof Element&&t.shadowRoot&&(e.full+=g(t.shadowRoot).full),Y.has(t)||(Te.observe(t,{childList:!0,characterData:!0,subtree:!0}),Y.add(t))}return D.set(t,e),e};var S=function*(t,e){let n=!1;for(let r of t.childNodes)if(r instanceof Element&&w(r)){let o;r.shadowRoot?o=S(r.shadowRoot,e):o=S(r,e);for(let i of o)yield i,n=!0}n||t instanceof Element&&w(t)&&g(t).full.includes(e)&&(yield t)};var L={};u(L,{checkVisibility:()=>Pe,pierce:()=>N,pierceAll:()=>Q});var Ee=[\"hidden\",\"collapse\"],Pe=(t,e)=>{if(!t)return e===!1;if(e===void 0)return t;let n=t.nodeType===Node.TEXT_NODE?t.parentElement:t,r=window.getComputedStyle(n),o=r&&!Ee.includes(r.visibility)&&!xe(n);return e===o?t:!1};function xe(t){let e=t.getBoundingClientRect();return e.width===0||e.height===0}var Ne=t=>\"shadowRoot\"in t&&t.shadowRoot instanceof ShadowRoot;function*N(t){Ne(t)?yield t.shadowRoot:yield t}function*Q(t){t=N(t).next().value,yield t;let e=[document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT)];for(let n of e){let r;for(;r=n.nextNode();)r.shadowRoot&&(yield r.shadowRoot,e.push(document.createTreeWalker(r.shadowRoot,NodeFilter.SHOW_ELEMENT)))}}var j={};u(j,{xpathQuerySelectorAll:()=>$});var $=function*(t,e,n=-1){let o=(t.ownerDocument||document).evaluate(e,t,null,XPathResult.ORDERED_NODE_ITERATOR_TYPE),i=[],s;for(;(s=o.iterateNext())&&(i.push(s),!(n&&i.length===n)););for(let l=0;l\"querySelectorAll\"in t,A=class extends Error{constructor(e,n){super(`${e} is not a valid selector: ${n}`)}},U=class{#e;#r;#n=[];#t=void 0;elements;constructor(e,n,r){this.elements=[e],this.#e=n,this.#r=r,this.#o()}async run(){if(typeof this.#t==\"string\")switch(this.#t.trimStart()){case\":scope\":this.#o();break}for(;this.#t!==void 0;this.#o()){let e=this.#t,n=this.#e;typeof e==\"string\"?e[0]&&Ae.test(e[0])?this.elements=c.flatMap(this.elements,async function*(r){Z(r)&&(yield*r.querySelectorAll(e))}):this.elements=c.flatMap(this.elements,async function*(r){if(!r.parentElement){if(!Z(r))return;yield*r.querySelectorAll(e);return}let o=0;for(let i of r.parentElement.children)if(++o,i===r)break;yield*r.parentElement.querySelectorAll(`:scope>:nth-child(${o})${e}`)}):this.elements=c.flatMap(this.elements,async function*(r){switch(e.name){case\"text\":yield*S(r,e.value);break;case\"xpath\":yield*$(r,e.value);break;case\"aria\":yield*I(r,e.value);break;default:let o=O.get(e.name);if(!o)throw new A(n,`Unknown selector type: ${e.name}`);yield*o.querySelectorAll(r,e.value)}})}}#o(){if(this.#n.length!==0){this.#t=this.#n.shift();return}if(this.#r.length===0){this.#t=void 0;return}let e=this.#r.shift();switch(e){case\">>>>\":{this.elements=c.flatMap(this.elements,N),this.#o();break}case\">>>\":{this.elements=c.flatMap(this.elements,Q),this.#o();break}default:this.#n=e,this.#o();break}}},F=class{#e=new WeakMap;calculate(e,n=[]){if(e===null)return n;e instanceof ShadowRoot&&(e=e.host);let r=this.#e.get(e);if(r)return[...r,...n];let o=0;for(let s=e.previousSibling;s;s=s.previousSibling)++o;let i=this.calculate(e.parentNode,[o]);return this.#e.set(e,i),[...i,...n]}},ee=(t,e)=>{if(t.length+e.length===0)return 0;let[n=-1,...r]=t,[o=-1,...i]=e;return n===o?ee(r,i):n[r,n.calculate(r)]).sort(([,r],[,o])=>ee(r,o)).map(([r])=>r)},te=function(t,e){let n,r;try{[n,r]=K(e)}catch{return t.querySelectorAll(e)}if(r)return t.querySelectorAll(e);if(n.some(o=>{let i=0;return o.some(s=>(typeof s==\"string\"?++i:i=0,i>1))}))throw new A(e,\"Multiple deep combinators found in sequence.\");return ve(c.flatMap(n,o=>{let i=new U(t,e,o);return i.run(),i.elements}))},Ce=async function(t,e){for await(let n of te(t,e))return n;return null};var Ie=Object.freeze({...k,...M,...q,...V,..._,...L,...j,Deferred:f,createFunction:z,createTextContent:g,IntervalPoller:P,isSuitableNodeForTextMatching:w,MutationPoller:T,RAFPoller:E}),ke=Ie;\n/**\n * @license\n * Copyright 2018 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n/**\n * @license\n * Copyright 2024 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n/**\n * @license\n * Copyright 2022 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n/**\n * @license\n * Copyright 2020 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n"; /** * @license * Copyright 2024 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ /** * @internal */ class ScriptInjector { #updated = false; #amendments = new Set(); // Appends a statement of the form `(PuppeteerUtil) => {...}`. append(statement) { this.#update(() => { this.#amendments.add(statement); }); } pop(statement) { this.#update(() => { this.#amendments.delete(statement); }); } inject(inject, force = false) { if (this.#updated || force) { inject(this.#get()); } this.#updated = false; } #update(callback) { callback(); this.#updated = true; } #get() { return `(() => { const module = {}; ${source} ${[...this.#amendments] .map(statement => { return `(${statement})(module.exports.default);`; }) .join('')} return module.exports.default; })()`; } } /** * @internal */ const scriptInjector = new ScriptInjector(); /** * @license * Copyright 2023 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ /** * The registry of {@link CustomQueryHandler | custom query handlers}. * * @example * * ```ts * Puppeteer.customQueryHandlers.register('lit', { … }); * const aHandle = await page.$('lit/…'); * ``` * * @internal */ class CustomQueryHandlerRegistry { #handlers = new Map(); get(name) { const handler = this.#handlers.get(name); return handler ? handler[1] : undefined; } /** * Registers a {@link CustomQueryHandler | custom query handler}. * * @remarks * After registration, the handler can be used everywhere where a selector is * expected by prepending the selection string with `/`. The name is * only allowed to consist of lower- and upper case latin letters. * * @example * * ```ts * Puppeteer.customQueryHandlers.register('lit', { … }); * const aHandle = await page.$('lit/…'); * ``` * * @param name - Name to register under. * @param queryHandler - {@link CustomQueryHandler | Custom query handler} to * register. */ register(name, handler) { assert(!this.#handlers.has(name), `Cannot register over existing handler: ${name}`); assert(/^[a-zA-Z]+$/.test(name), `Custom query handler names may only contain [a-zA-Z]`); assert(handler.queryAll || handler.queryOne, `At least one query method must be implemented.`); const Handler = class extends QueryHandler { static querySelectorAll = interpolateFunction((node, selector, PuppeteerUtil) => { return PuppeteerUtil.customQuerySelectors .get(PLACEHOLDER('name')) .querySelectorAll(node, selector); }, { name: JSON.stringify(name) }); static querySelector = interpolateFunction((node, selector, PuppeteerUtil) => { return PuppeteerUtil.customQuerySelectors .get(PLACEHOLDER('name')) .querySelector(node, selector); }, { name: JSON.stringify(name) }); }; const registerScript = interpolateFunction((PuppeteerUtil) => { PuppeteerUtil.customQuerySelectors.register(PLACEHOLDER('name'), { queryAll: PLACEHOLDER('queryAll'), queryOne: PLACEHOLDER('queryOne'), }); }, { name: JSON.stringify(name), queryAll: handler.queryAll ? stringifyFunction(handler.queryAll) : String(undefined), queryOne: handler.queryOne ? stringifyFunction(handler.queryOne) : String(undefined), }).toString(); this.#handlers.set(name, [registerScript, Handler]); scriptInjector.append(registerScript); } /** * Unregisters the {@link CustomQueryHandler | custom query handler} for the * given name. * * @throws `Error` if there is no handler under the given name. */ unregister(name) { const handler = this.#handlers.get(name); if (!handler) { throw new Error(`Cannot unregister unknown handler: ${name}`); } scriptInjector.pop(handler[0]); this.#handlers.delete(name); } /** * Gets the names of all {@link CustomQueryHandler | custom query handlers}. */ names() { return [...this.#handlers.keys()]; } /** * Unregisters all custom query handlers. */ clear() { for (const [registerScript] of this.#handlers) { scriptInjector.pop(registerScript); } this.#handlers.clear(); } } /** * @internal */ const customQueryHandlers = new CustomQueryHandlerRegistry(); /** * @license * Copyright 2023 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ /** * @internal */ class PierceQueryHandler extends QueryHandler { static querySelector = (element, selector, { pierceQuerySelector }) => { return pierceQuerySelector(element, selector); }; static querySelectorAll = (element, selector, { pierceQuerySelectorAll }) => { return pierceQuerySelectorAll(element, selector); }; } /** * @license * Copyright 2023 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ /** * @internal */ class PQueryHandler extends QueryHandler { static querySelectorAll = (element, selector, { pQuerySelectorAll }) => { return pQuerySelectorAll(element, selector); }; static querySelector = (element, selector, { pQuerySelector }) => { return pQuerySelector(element, selector); }; } /** * @license * Copyright 2023 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ /** * @internal */ class TextQueryHandler extends QueryHandler { static querySelectorAll = (element, selector, { textQuerySelectorAll }) => { return textQuerySelectorAll(element, selector); }; } /** * @license * Copyright 2023 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ /** * @internal */ class XPathQueryHandler extends QueryHandler { static querySelectorAll = (element, selector, { xpathQuerySelectorAll }) => { return xpathQuerySelectorAll(element, selector); }; static querySelector = (element, selector, { xpathQuerySelectorAll }) => { for (const result of xpathQuerySelectorAll(element, selector, 1)) { return result; } return null; }; } /** * @license * Copyright 2023 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ const BUILTIN_QUERY_HANDLERS = { aria: ARIAQueryHandler, pierce: PierceQueryHandler, xpath: XPathQueryHandler, text: TextQueryHandler, }; const QUERY_SEPARATORS = ['=', '/']; /** * @internal */ function getQueryHandlerAndSelector(selector) { for (const handlerMap of [ customQueryHandlers.names().map(name => { return [name, customQueryHandlers.get(name)]; }), Object.entries(BUILTIN_QUERY_HANDLERS), ]) { for (const [name, QueryHandler] of handlerMap) { for (const separator of QUERY_SEPARATORS) { const prefix = `${name}${separator}`; if (selector.startsWith(prefix)) { selector = selector.slice(prefix.length); return { updatedSelector: selector, QueryHandler }; } } } } return { updatedSelector: selector, QueryHandler: PQueryHandler }; } /** * @license * Copyright 2024 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ /** * Creates and returns a deferred object along with the resolve/reject functions. * * If the deferred has not been resolved/rejected within the `timeout` period, * the deferred gets resolves with a timeout error. `timeout` has to be greater than 0 or * it is ignored. * * @internal */ class Deferred { static create(opts) { return new Deferred(opts); } static async race(awaitables) { const deferredWithTimeout = new Set(); try { const promises = awaitables.map(value => { if (value instanceof Deferred) { if (value.#timeoutId) { deferredWithTimeout.add(value); } return value.valueOrThrow(); } return value; }); // eslint-disable-next-line no-restricted-syntax return await Promise.race(promises); } finally { for (const deferred of deferredWithTimeout) { // We need to stop the timeout else // Node.JS will keep running the event loop till the // timer executes deferred.reject(new Error('Timeout cleared')); } } } #isResolved = false; #isRejected = false; #value; // SAFETY: This is ensured by #taskPromise. #resolve; #taskPromise = new Promise(resolve => { this.#resolve = resolve; }); #timeoutId; #timeoutError; constructor(opts) { if (opts && opts.timeout > 0) { this.#timeoutError = new TimeoutError(opts.message); this.#timeoutId = setTimeout(() => { this.reject(this.#timeoutError); }, opts.timeout); } } #finish(value) { clearTimeout(this.#timeoutId); this.#value = value; this.#resolve(); } resolve(value) { if (this.#isRejected || this.#isResolved) { return; } this.#isResolved = true; this.#finish(value); } reject(error) { if (this.#isRejected || this.#isResolved) { return; } this.#isRejected = true; this.#finish(error); } resolved() { return this.#isResolved; } finished() { return this.#isResolved || this.#isRejected; } value() { return this.#value; } #promise; valueOrThrow() { if (!this.#promise) { this.#promise = (async () => { await this.#taskPromise; if (this.#isRejected) { throw this.#value; } return this.#value; })(); } return this.#promise; } } /** * @license * Copyright 2024 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ /** * @internal */ class Mutex { static Guard = class Guard { #mutex; constructor(mutex) { this.#mutex = mutex; } [disposeSymbol]() { return this.#mutex.release(); } }; #locked = false; #acquirers = []; // This is FIFO. async acquire() { if (!this.#locked) { this.#locked = true; return new Mutex.Guard(this); } const deferred = Deferred.create(); this.#acquirers.push(deferred.resolve.bind(deferred)); await deferred.valueOrThrow(); return new Mutex.Guard(this); } release() { const resolve = this.#acquirers.shift(); if (!resolve) { this.#locked = false; return; } resolve(); } } /** * @license * Copyright 2023 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ var __addDisposableResource$8 = (undefined && undefined.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); dispose = value[Symbol.asyncDispose]; } if (dispose === void 0) { if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined."); dispose = value[Symbol.dispose]; } if (typeof dispose !== "function") throw new TypeError("Object not disposable."); env.stack.push({ value: value, dispose: dispose, async: async }); } else if (async) { env.stack.push({ async: true }); } return value; }; var __disposeResources$8 = (undefined && undefined.__disposeResources) || (function (SuppressedError) { return function (env) { function fail(e) { env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e; env.hasError = true; } function next() { while (env.stack.length) { var rec = env.stack.pop(); try { var result = rec.dispose && rec.dispose.call(rec.value); if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); }); } catch (e) { fail(e); } } if (env.hasError) throw env.error; } return next(); }; })(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { var e = new Error(message); return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; }); const instances = new WeakSet(); function moveable(Class, _) { let hasDispose = false; if (Class.prototype[disposeSymbol]) { const dispose = Class.prototype[disposeSymbol]; Class.prototype[disposeSymbol] = function () { if (instances.has(this)) { instances.delete(this); return; } return dispose.call(this); }; hasDispose = true; } if (Class.prototype[asyncDisposeSymbol]) { const asyncDispose = Class.prototype[asyncDisposeSymbol]; Class.prototype[asyncDisposeSymbol] = function () { if (instances.has(this)) { instances.delete(this); return; } return asyncDispose.call(this); }; hasDispose = true; } if (hasDispose) { Class.prototype.move = function () { instances.add(this); return this; }; } return Class; } function throwIfDisposed(message = value => { return `Attempted to use disposed ${value.constructor.name}.`; }) { return (target, _) => { return function (...args) { if (this.disposed) { throw new Error(message(this)); } return target.call(this, ...args); }; }; } function inertIfDisposed(target, _) { return function (...args) { if (this.disposed) { return; } return target.call(this, ...args); }; } /** * The decorator only invokes the target if the target has not been invoked with * the same arguments before. The decorated method throws an error if it's * invoked with a different number of elements: if you decorate a method, it * should have the same number of arguments * * @internal */ function invokeAtMostOnceForArguments(target, _) { const cache = new WeakMap(); let cacheDepth = -1; return function (...args) { if (cacheDepth === -1) { cacheDepth = args.length; } if (cacheDepth !== args.length) { throw new Error('Memoized method was called with the wrong number of arguments'); } let freshArguments = false; let cacheIterator = cache; for (const arg of args) { if (cacheIterator.has(arg)) { cacheIterator = cacheIterator.get(arg); } else { freshArguments = true; cacheIterator.set(arg, new WeakMap()); cacheIterator = cacheIterator.get(arg); } } if (!freshArguments) { return; } return target.call(this, ...args); }; } function guarded(getKey = function () { return this; }) { return (target, _) => { const mutexes = new WeakMap(); return async function (...args) { const env_1 = { stack: [], error: void 0, hasError: false }; try { const key = getKey.call(this); let mutex = mutexes.get(key); if (!mutex) { mutex = new Mutex(); mutexes.set(key, mutex); } const _ = __addDisposableResource$8(env_1, await mutex.acquire(), true); return await target.call(this, ...args); } catch (e_1) { env_1.error = e_1; env_1.hasError = true; } finally { const result_1 = __disposeResources$8(env_1); if (result_1) await result_1; } }; }; } const bubbleHandlers = new WeakMap(); /** * Event emitter fields marked with `bubble` will have their events bubble up * the field owner. */ // The type is too complicated to type. // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types function bubble(events) { return ({ set, get }, context) => { context.addInitializer(function () { const handlers = bubbleHandlers.get(this) ?? new Map(); if (handlers.has(events)) { return; } const handler = events !== undefined ? (type, event) => { if (events.includes(type)) { this.emit(type, event); } } : (type, event) => { this.emit(type, event); }; handlers.set(events, handler); bubbleHandlers.set(this, handlers); }); return { set(emitter) { const handler = bubbleHandlers.get(this).get(events); // In case we are re-setting. const oldEmitter = get.call(this); if (oldEmitter !== undefined) { oldEmitter.off('*', handler); } if (emitter === undefined) { return; } emitter.on('*', handler); set.call(this, emitter); }, // @ts-expect-error -- TypeScript incorrectly types init to require a // return. init(emitter) { if (emitter === undefined) { return; } const handler = bubbleHandlers.get(this).get(events); emitter.on('*', handler); return emitter; }, }; }; } /** * @license * Copyright 2023 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ var __runInitializers$6 = (undefined && undefined.__runInitializers) || function (thisArg, initializers, value) { var useValue = arguments.length > 2; for (var i = 0; i < initializers.length; i++) { value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); } return useValue ? value : void 0; }; var __esDecorate$6 = (undefined && undefined.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); var _, done = false; for (var i = decorators.length - 1; i >= 0; i--) { var context = {}; for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; for (var p in contextIn.access) context.access[p] = contextIn.access[p]; context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); if (kind === "accessor") { if (result === void 0) continue; if (result === null || typeof result !== "object") throw new TypeError("Object expected"); if (_ = accept(result.get)) descriptor.get = _; if (_ = accept(result.set)) descriptor.set = _; if (_ = accept(result.init)) initializers.unshift(_); } else if (_ = accept(result)) { if (kind === "field") initializers.unshift(_); else descriptor[key] = _; } } if (target) Object.defineProperty(target, contextIn.name, descriptor); done = true; }; var __addDisposableResource$7 = (undefined && undefined.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); dispose = value[Symbol.asyncDispose]; } if (dispose === void 0) { if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined."); dispose = value[Symbol.dispose]; } if (typeof dispose !== "function") throw new TypeError("Object not disposable."); env.stack.push({ value: value, dispose: dispose, async: async }); } else if (async) { env.stack.push({ async: true }); } return value; }; var __disposeResources$7 = (undefined && undefined.__disposeResources) || (function (SuppressedError) { return function (env) { function fail(e) { env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e; env.hasError = true; } function next() { while (env.stack.length) { var rec = env.stack.pop(); try { var result = rec.dispose && rec.dispose.call(rec.value); if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); }); } catch (e) { fail(e); } } if (env.hasError) throw env.error; } return next(); }; })(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { var e = new Error(message); return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; }); /** * Represents a reference to a JavaScript object. Instances can be created using * {@link Page.evaluateHandle}. * * Handles prevent the referenced JavaScript object from being garbage-collected * unless the handle is purposely {@link JSHandle.dispose | disposed}. JSHandles * are auto-disposed when their associated frame is navigated away or the parent * context gets destroyed. * * Handles can be used as arguments for any evaluation function such as * {@link Page.$eval}, {@link Page.evaluate}, and {@link Page.evaluateHandle}. * They are resolved to their referenced object. * * @example * * ```ts * const windowHandle = await page.evaluateHandle(() => window); * ``` * * @public */ let JSHandle = (() => { let _classDecorators = [moveable]; let _classDescriptor; let _classExtraInitializers = []; let _classThis; let _instanceExtraInitializers = []; let _getProperty_decorators; let _getProperties_decorators; (class { static { _classThis = this; } static { const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0; __esDecorate$6(this, null, _getProperty_decorators, { kind: "method", name: "getProperty", static: false, private: false, access: { has: obj => "getProperty" in obj, get: obj => obj.getProperty }, metadata: _metadata }, null, _instanceExtraInitializers); __esDecorate$6(this, null, _getProperties_decorators, { kind: "method", name: "getProperties", static: false, private: false, access: { has: obj => "getProperties" in obj, get: obj => obj.getProperties }, metadata: _metadata }, null, _instanceExtraInitializers); __esDecorate$6(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers); _classThis = _classDescriptor.value; if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata }); __runInitializers$6(_classThis, _classExtraInitializers); } /** * @internal */ constructor() { __runInitializers$6(this, _instanceExtraInitializers); } /** * Evaluates the given function with the current handle as its first argument. */ async evaluate(pageFunction, ...args) { pageFunction = withSourcePuppeteerURLIfNone(this.evaluate.name, pageFunction); return await this.realm.evaluate(pageFunction, this, ...args); } /** * Evaluates the given function with the current handle as its first argument. * */ async evaluateHandle(pageFunction, ...args) { pageFunction = withSourcePuppeteerURLIfNone(this.evaluateHandle.name, pageFunction); return await this.realm.evaluateHandle(pageFunction, this, ...args); } /** * @internal */ async getProperty(propertyName) { return await this.evaluateHandle((object, propertyName) => { return object[propertyName]; }, propertyName); } /** * Gets a map of handles representing the properties of the current handle. * * @example * * ```ts * const listHandle = await page.evaluateHandle(() => document.body.children); * const properties = await listHandle.getProperties(); * const children = []; * for (const property of properties.values()) { * const element = property.asElement(); * if (element) { * children.push(element); * } * } * children; // holds elementHandles to all children of document.body * ``` */ async getProperties() { const propertyNames = await this.evaluate(object => { const enumerableProperties = []; const descriptors = Object.getOwnPropertyDescriptors(object); for (const propertyName in descriptors) { if (descriptors[propertyName]?.enumerable) { enumerableProperties.push(propertyName); } } return enumerableProperties; }); const map = new Map(); const results = await Promise.all(propertyNames.map(key => { return this.getProperty(key); })); for (const [key, value] of Object.entries(propertyNames)) { const env_1 = { stack: [], error: void 0, hasError: false }; try { const handle = __addDisposableResource$7(env_1, results[key], false); if (handle) { map.set(value, handle.move()); } } catch (e_1) { env_1.error = e_1; env_1.hasError = true; } finally { __disposeResources$7(env_1); } } return map; } /** @internal */ [(_getProperty_decorators = [throwIfDisposed()], _getProperties_decorators = [throwIfDisposed()], disposeSymbol)]() { return void this.dispose().catch(debugError); } /** @internal */ [asyncDisposeSymbol]() { return this.dispose(); } }); return _classThis; })(); /** * @license * Copyright 2023 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ var __runInitializers$5 = (undefined && undefined.__runInitializers) || function (thisArg, initializers, value) { var useValue = arguments.length > 2; for (var i = 0; i < initializers.length; i++) { value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); } return useValue ? value : void 0; }; var __esDecorate$5 = (undefined && undefined.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); var _, done = false; for (var i = decorators.length - 1; i >= 0; i--) { var context = {}; for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; for (var p in contextIn.access) context.access[p] = contextIn.access[p]; context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); if (kind === "accessor") { if (result === void 0) continue; if (result === null || typeof result !== "object") throw new TypeError("Object expected"); if (_ = accept(result.get)) descriptor.get = _; if (_ = accept(result.set)) descriptor.set = _; if (_ = accept(result.init)) initializers.unshift(_); } else if (_ = accept(result)) { if (kind === "field") initializers.unshift(_); else descriptor[key] = _; } } if (target) Object.defineProperty(target, contextIn.name, descriptor); done = true; }; var __addDisposableResource$6 = (undefined && undefined.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); dispose = value[Symbol.asyncDispose]; } if (dispose === void 0) { if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined."); dispose = value[Symbol.dispose]; } if (typeof dispose !== "function") throw new TypeError("Object not disposable."); env.stack.push({ value: value, dispose: dispose, async: async }); } else if (async) { env.stack.push({ async: true }); } return value; }; var __disposeResources$6 = (undefined && undefined.__disposeResources) || (function (SuppressedError) { return function (env) { function fail(e) { env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e; env.hasError = true; } function next() { while (env.stack.length) { var rec = env.stack.pop(); try { var result = rec.dispose && rec.dispose.call(rec.value); if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); }); } catch (e) { fail(e); } } if (env.hasError) throw env.error; } return next(); }; })(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { var e = new Error(message); return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; }); /** * ElementHandle represents an in-page DOM element. * * @remarks * ElementHandles can be created with the {@link Page.$} method. * * ```ts * import puppeteer from 'puppeteer'; * * (async () => { * const browser = await puppeteer.launch(); * const page = await browser.newPage(); * await page.goto('https://example.com'); * const hrefElement = await page.$('a'); * await hrefElement.click(); * // ... * })(); * ``` * * ElementHandle prevents the DOM element from being garbage-collected unless the * handle is {@link JSHandle.dispose | disposed}. ElementHandles are auto-disposed * when their origin frame gets navigated. * * ElementHandle instances can be used as arguments in {@link Page.$eval} and * {@link Page.evaluate} methods. * * If you're using TypeScript, ElementHandle takes a generic argument that * denotes the type of element the handle is holding within. For example, if you * have a handle to a `` element matching `selector`, the method * throws an error. * * @example * * ```ts * handle.select('blue'); // single selection * handle.select('red', 'green', 'blue'); // multiple selections * ``` * * @param values - Values of options to select. If the ` element.'); } const selectedValues = new Set(); if (!element.multiple) { for (const option of element.options) { option.selected = false; } for (const option of element.options) { if (values.has(option.value)) { option.selected = true; selectedValues.add(option.value); break; } } } else { for (const option of element.options) { option.selected = values.has(option.value); if (option.selected) { selectedValues.add(option.value); } } } element.dispatchEvent(new Event('input', { bubbles: true })); element.dispatchEvent(new Event('change', { bubbles: true })); return [...selectedValues.values()]; }, values); } /** * This method scrolls element into view if needed, and then uses * {@link Touchscreen.tap} to tap in the center of the element. * If the element is detached from DOM, the method throws an error. */ async tap() { await this.scrollIntoViewIfNeeded(); const { x, y } = await this.clickablePoint(); await this.frame.page().touchscreen.tap(x, y); } async touchStart() { await this.scrollIntoViewIfNeeded(); const { x, y } = await this.clickablePoint(); await this.frame.page().touchscreen.touchStart(x, y); } async touchMove() { await this.scrollIntoViewIfNeeded(); const { x, y } = await this.clickablePoint(); await this.frame.page().touchscreen.touchMove(x, y); } async touchEnd() { await this.scrollIntoViewIfNeeded(); await this.frame.page().touchscreen.touchEnd(); } /** * Calls {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus | focus} on the element. */ async focus() { await this.evaluate(element => { if (!(element instanceof HTMLElement)) { throw new Error('Cannot focus non-HTMLElement'); } return element.focus(); }); } /** * Focuses the element, and then sends a `keydown`, `keypress`/`input`, and * `keyup` event for each character in the text. * * To press a special key, like `Control` or `ArrowDown`, * use {@link ElementHandle.press}. * * @example * * ```ts * await elementHandle.type('Hello'); // Types instantly * await elementHandle.type('World', {delay: 100}); // Types slower, like a user * ``` * * @example * An example of typing into a text field and then submitting the form: * * ```ts * const elementHandle = await page.$('input'); * await elementHandle.type('some text'); * await elementHandle.press('Enter'); * ``` * * @param options - Delay in milliseconds. Defaults to 0. */ async type(text, options) { await this.focus(); await this.frame.page().keyboard.type(text, options); } /** * Focuses the element, and then uses {@link Keyboard.down} and {@link Keyboard.up}. * * @remarks * If `key` is a single character and no modifier keys besides `Shift` * are being held down, a `keypress`/`input` event will also be generated. * The `text` option can be specified to force an input event to be generated. * * **NOTE** Modifier keys DO affect `elementHandle.press`. Holding down `Shift` * will type the text in upper case. * * @param key - Name of key to press, such as `ArrowLeft`. * See {@link KeyInput} for a list of all key names. */ async press(key, options) { await this.focus(); await this.frame.page().keyboard.press(key, options); } async #clickableBox() { const boxes = await this.evaluate(element => { if (!(element instanceof Element)) { return null; } return [...element.getClientRects()].map(rect => { return { x: rect.x, y: rect.y, width: rect.width, height: rect.height }; }); }); if (!boxes?.length) { return null; } await this.#intersectBoundingBoxesWithFrame(boxes); let frame = this.frame; let parentFrame; while ((parentFrame = frame?.parentFrame())) { const env_3 = { stack: [], error: void 0, hasError: false }; try { const handle = __addDisposableResource$6(env_3, await frame.frameElement(), false); if (!handle) { throw new Error('Unsupported frame type'); } const parentBox = await handle.evaluate(element => { // Element is not visible. if (element.getClientRects().length === 0) { return null; } const rect = element.getBoundingClientRect(); const style = window.getComputedStyle(element); return { left: rect.left + parseInt(style.paddingLeft, 10) + parseInt(style.borderLeftWidth, 10), top: rect.top + parseInt(style.paddingTop, 10) + parseInt(style.borderTopWidth, 10), }; }); if (!parentBox) { return null; } for (const box of boxes) { box.x += parentBox.left; box.y += parentBox.top; } await handle.#intersectBoundingBoxesWithFrame(boxes); frame = parentFrame; } catch (e_3) { env_3.error = e_3; env_3.hasError = true; } finally { __disposeResources$6(env_3); } } const box = boxes.find(box => { return box.width >= 1 && box.height >= 1; }); if (!box) { return null; } return { x: box.x, y: box.y, height: box.height, width: box.width, }; } async #intersectBoundingBoxesWithFrame(boxes) { const { documentWidth, documentHeight } = await this.frame .isolatedRealm() .evaluate(() => { return { documentWidth: document.documentElement.clientWidth, documentHeight: document.documentElement.clientHeight, }; }); for (const box of boxes) { intersectBoundingBox(box, documentWidth, documentHeight); } } /** * This method returns the bounding box of the element (relative to the main frame), * or `null` if the element is {@link https://drafts.csswg.org/css-display-4/#box-generation | not part of the layout} * (example: `display: none`). */ async boundingBox() { const box = await this.evaluate(element => { if (!(element instanceof Element)) { return null; } // Element is not visible. if (element.getClientRects().length === 0) { return null; } const rect = element.getBoundingClientRect(); return { x: rect.x, y: rect.y, width: rect.width, height: rect.height }; }); if (!box) { return null; } const offset = await this.#getTopLeftCornerOfFrame(); if (!offset) { return null; } return { x: box.x + offset.x, y: box.y + offset.y, height: box.height, width: box.width, }; } /** * This method returns boxes of the element, * or `null` if the element is {@link https://drafts.csswg.org/css-display-4/#box-generation | not part of the layout} * (example: `display: none`). * * @remarks * * Boxes are represented as an array of points; * Each Point is an object `{x, y}`. Box points are sorted clock-wise. */ async boxModel() { const model = await this.evaluate(element => { if (!(element instanceof Element)) { return null; } // Element is not visible. if (element.getClientRects().length === 0) { return null; } const rect = element.getBoundingClientRect(); const style = window.getComputedStyle(element); const offsets = { padding: { left: parseInt(style.paddingLeft, 10), top: parseInt(style.paddingTop, 10), right: parseInt(style.paddingRight, 10), bottom: parseInt(style.paddingBottom, 10), }, margin: { left: -parseInt(style.marginLeft, 10), top: -parseInt(style.marginTop, 10), right: -parseInt(style.marginRight, 10), bottom: -parseInt(style.marginBottom, 10), }, border: { left: parseInt(style.borderLeft, 10), top: parseInt(style.borderTop, 10), right: parseInt(style.borderRight, 10), bottom: parseInt(style.borderBottom, 10), }, }; const border = [ { x: rect.left, y: rect.top }, { x: rect.left + rect.width, y: rect.top }, { x: rect.left + rect.width, y: rect.top + rect.bottom }, { x: rect.left, y: rect.top + rect.bottom }, ]; const padding = transformQuadWithOffsets(border, offsets.border); const content = transformQuadWithOffsets(padding, offsets.padding); const margin = transformQuadWithOffsets(border, offsets.margin); return { content, padding, border, margin, width: rect.width, height: rect.height, }; function transformQuadWithOffsets(quad, offsets) { return [ { x: quad[0].x + offsets.left, y: quad[0].y + offsets.top, }, { x: quad[1].x - offsets.right, y: quad[1].y + offsets.top, }, { x: quad[2].x - offsets.right, y: quad[2].y - offsets.bottom, }, { x: quad[3].x + offsets.left, y: quad[3].y - offsets.bottom, }, ]; } }); if (!model) { return null; } const offset = await this.#getTopLeftCornerOfFrame(); if (!offset) { return null; } for (const attribute of [ 'content', 'padding', 'border', 'margin', ]) { for (const point of model[attribute]) { point.x += offset.x; point.y += offset.y; } } return model; } async #getTopLeftCornerOfFrame() { const point = { x: 0, y: 0 }; let frame = this.frame; let parentFrame; while ((parentFrame = frame?.parentFrame())) { const env_4 = { stack: [], error: void 0, hasError: false }; try { const handle = __addDisposableResource$6(env_4, await frame.frameElement(), false); if (!handle) { throw new Error('Unsupported frame type'); } const parentBox = await handle.evaluate(element => { // Element is not visible. if (element.getClientRects().length === 0) { return null; } const rect = element.getBoundingClientRect(); const style = window.getComputedStyle(element); return { left: rect.left + parseInt(style.paddingLeft, 10) + parseInt(style.borderLeftWidth, 10), top: rect.top + parseInt(style.paddingTop, 10) + parseInt(style.borderTopWidth, 10), }; }); if (!parentBox) { return null; } point.x += parentBox.left; point.y += parentBox.top; frame = parentFrame; } catch (e_4) { env_4.error = e_4; env_4.hasError = true; } finally { __disposeResources$6(env_4); } } return point; } async screenshot(options = {}) { const { scrollIntoView = true, clip } = options; const page = this.frame.page(); // Only scroll the element into view if the user wants it. if (scrollIntoView) { await this.scrollIntoViewIfNeeded(); } const elementClip = await this.#nonEmptyVisibleBoundingBox(); const [pageLeft, pageTop] = await this.evaluate(() => { if (!window.visualViewport) { throw new Error('window.visualViewport is not supported.'); } return [ window.visualViewport.pageLeft, window.visualViewport.pageTop, ]; }); elementClip.x += pageLeft; elementClip.y += pageTop; if (clip) { elementClip.x += clip.x; elementClip.y += clip.y; elementClip.height = clip.height; elementClip.width = clip.width; } return await page.screenshot({ ...options, clip: elementClip }); } async #nonEmptyVisibleBoundingBox() { const box = await this.boundingBox(); assert(box, 'Node is either not visible or not an HTMLElement'); assert(box.width !== 0, 'Node has 0 width.'); assert(box.height !== 0, 'Node has 0 height.'); return box; } /** * @internal */ async assertConnectedElement() { const error = await this.evaluate(async (element) => { if (!element.isConnected) { return 'Node is detached from document'; } if (element.nodeType !== Node.ELEMENT_NODE) { return 'Node is not of type HTMLElement'; } return; }); if (error) { throw new Error(error); } } /** * @internal */ async scrollIntoViewIfNeeded() { if (await this.isIntersectingViewport({ threshold: 1, })) { return; } await this.scrollIntoView(); } /** * Resolves to true if the element is visible in the current viewport. If an * element is an SVG, we check if the svg owner element is in the viewport * instead. See https://crbug.com/963246. * * @param options - Threshold for the intersection between 0 (no intersection) and 1 * (full intersection). Defaults to 1. */ async isIntersectingViewport(options = {}) { const env_5 = { stack: [], error: void 0, hasError: false }; try { await this.assertConnectedElement(); // eslint-disable-next-line rulesdir/use-using -- Returns `this`. const handle = await this.#asSVGElementHandle(); const target = __addDisposableResource$6(env_5, handle && (await handle.#getOwnerSVGElement()), false); return await (target ?? this).evaluate(async (element, threshold) => { const visibleRatio = await new Promise(resolve => { const observer = new IntersectionObserver(entries => { resolve(entries[0].intersectionRatio); observer.disconnect(); }); observer.observe(element); }); return threshold === 1 ? visibleRatio === 1 : visibleRatio > threshold; }, options.threshold ?? 0); } catch (e_5) { env_5.error = e_5; env_5.hasError = true; } finally { __disposeResources$6(env_5); } } /** * Scrolls the element into view using either the automation protocol client * or by calling element.scrollIntoView. */ async scrollIntoView() { await this.assertConnectedElement(); await this.evaluate(async (element) => { element.scrollIntoView({ block: 'center', inline: 'center', behavior: 'instant', }); }); } /** * Returns true if an element is an SVGElement (included svg, path, rect * etc.). */ async #asSVGElementHandle() { if (await this.evaluate(element => { return element instanceof SVGElement; })) { return this; } else { return null; } } async #getOwnerSVGElement() { // SVGSVGElement.ownerSVGElement === null. return await this.evaluateHandle(element => { if (element instanceof SVGSVGElement) { return element; } return element.ownerSVGElement; }); } }; })(); function intersectBoundingBox(box, width, height) { box.width = Math.max(box.x >= 0 ? Math.min(width - box.x, box.width) : Math.min(width, box.width + box.x), 0); box.height = Math.max(box.y >= 0 ? Math.min(height - box.y, box.height) : Math.min(height, box.height + box.y), 0); } var __addDisposableResource$5 = (undefined && undefined.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); dispose = value[Symbol.asyncDispose]; } if (dispose === void 0) { if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined."); dispose = value[Symbol.dispose]; } if (typeof dispose !== "function") throw new TypeError("Object not disposable."); env.stack.push({ value: value, dispose: dispose, async: async }); } else if (async) { env.stack.push({ async: true }); } return value; }; var __disposeResources$5 = (undefined && undefined.__disposeResources) || (function (SuppressedError) { return function (env) { function fail(e) { env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e; env.hasError = true; } function next() { while (env.stack.length) { var rec = env.stack.pop(); try { var result = rec.dispose && rec.dispose.call(rec.value); if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); }); } catch (e) { fail(e); } } if (env.hasError) throw env.error; } return next(); }; })(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { var e = new Error(message); return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; }); /** * All the events that a locator instance may emit. * * @public */ var LocatorEvent; (function (LocatorEvent) { /** * Emitted every time before the locator performs an action on the located element(s). */ LocatorEvent["Action"] = "action"; })(LocatorEvent || (LocatorEvent = {})); /** * Locators describe a strategy of locating objects and performing an action on * them. If the action fails because the object is not ready for the action, the * whole operation is retried. Various preconditions for a successful action are * checked automatically. * * @public */ class Locator extends EventEmitter { /** * Creates a race between multiple locators but ensures that only a single one * acts. * * @public */ static race(locators) { return RaceLocator.create(locators); } /** * @internal */ visibility = null; /** * @internal */ _timeout = 30000; #ensureElementIsInTheViewport = true; #waitForEnabled = true; #waitForStableBoundingBox = true; /** * @internal */ operators = { conditions: (conditions, signal) => { return mergeMap((handle) => { return merge(...conditions.map(condition => { return condition(handle, signal); })).pipe(defaultIfEmpty(handle)); }); }, retryAndRaceWithSignalAndTimer: (signal, cause) => { const candidates = []; if (signal) { candidates.push(fromEvent(signal, 'abort').pipe(map(() => { if (signal.reason instanceof Error) { signal.reason.cause = cause; } throw signal.reason; }))); } candidates.push(timeout(this._timeout, cause)); return pipe(retry({ delay: RETRY_DELAY }), raceWith(...candidates)); }, }; // Determines when the locator will timeout for actions. get timeout() { return this._timeout; } setTimeout(timeout) { const locator = this._clone(); locator._timeout = timeout; return locator; } setVisibility(visibility) { const locator = this._clone(); locator.visibility = visibility; return locator; } setWaitForEnabled(value) { const locator = this._clone(); locator.#waitForEnabled = value; return locator; } setEnsureElementIsInTheViewport(value) { const locator = this._clone(); locator.#ensureElementIsInTheViewport = value; return locator; } setWaitForStableBoundingBox(value) { const locator = this._clone(); locator.#waitForStableBoundingBox = value; return locator; } /** * @internal */ copyOptions(locator) { this._timeout = locator._timeout; this.visibility = locator.visibility; this.#waitForEnabled = locator.#waitForEnabled; this.#ensureElementIsInTheViewport = locator.#ensureElementIsInTheViewport; this.#waitForStableBoundingBox = locator.#waitForStableBoundingBox; return this; } /** * If the element has a "disabled" property, wait for the element to be * enabled. */ #waitForEnabledIfNeeded = (handle, signal) => { if (!this.#waitForEnabled) { return EMPTY; } return from(handle.frame.waitForFunction(element => { if (!(element instanceof HTMLElement)) { return true; } const isNativeFormControl = [ 'BUTTON', 'INPUT', 'SELECT', 'TEXTAREA', 'OPTION', 'OPTGROUP', ].includes(element.nodeName); return !isNativeFormControl || !element.hasAttribute('disabled'); }, { timeout: this._timeout, signal, }, handle)).pipe(ignoreElements()); }; /** * Compares the bounding box of the element for two consecutive animation * frames and waits till they are the same. */ #waitForStableBoundingBoxIfNeeded = (handle) => { if (!this.#waitForStableBoundingBox) { return EMPTY; } return defer(() => { // Note we don't use waitForFunction because that relies on RAF. return from(handle.evaluate(element => { return new Promise(resolve => { window.requestAnimationFrame(() => { const rect1 = element.getBoundingClientRect(); window.requestAnimationFrame(() => { const rect2 = element.getBoundingClientRect(); resolve([ { x: rect1.x, y: rect1.y, width: rect1.width, height: rect1.height, }, { x: rect2.x, y: rect2.y, width: rect2.width, height: rect2.height, }, ]); }); }); }); })); }).pipe(first(([rect1, rect2]) => { return (rect1.x === rect2.x && rect1.y === rect2.y && rect1.width === rect2.width && rect1.height === rect2.height); }), retry({ delay: RETRY_DELAY }), ignoreElements()); }; /** * Checks if the element is in the viewport and auto-scrolls it if it is not. */ #ensureElementIsInTheViewportIfNeeded = (handle) => { if (!this.#ensureElementIsInTheViewport) { return EMPTY; } return from(handle.isIntersectingViewport({ threshold: 0 })).pipe(filter(isIntersectingViewport => { return !isIntersectingViewport; }), mergeMap(() => { return from(handle.scrollIntoView()); }), mergeMap(() => { return defer(() => { return from(handle.isIntersectingViewport({ threshold: 0 })); }).pipe(first(identity), retry({ delay: RETRY_DELAY }), ignoreElements()); })); }; #click(options) { const signal = options?.signal; const cause = new Error('Locator.click'); return this._wait(options).pipe(this.operators.conditions([ this.#ensureElementIsInTheViewportIfNeeded, this.#waitForStableBoundingBoxIfNeeded, this.#waitForEnabledIfNeeded, ], signal), tap(() => { return this.emit(LocatorEvent.Action, undefined); }), mergeMap(handle => { return from(handle.click(options)).pipe(catchError(err => { void handle.dispose().catch(debugError); throw err; })); }), this.operators.retryAndRaceWithSignalAndTimer(signal, cause)); } #fill(value, options) { const signal = options?.signal; const cause = new Error('Locator.fill'); return this._wait(options).pipe(this.operators.conditions([ this.#ensureElementIsInTheViewportIfNeeded, this.#waitForStableBoundingBoxIfNeeded, this.#waitForEnabledIfNeeded, ], signal), tap(() => { return this.emit(LocatorEvent.Action, undefined); }), mergeMap(handle => { return from(handle.evaluate(el => { if (el instanceof HTMLSelectElement) { return 'select'; } if (el instanceof HTMLTextAreaElement) { return 'typeable-input'; } if (el instanceof HTMLInputElement) { if (new Set([ 'textarea', 'text', 'url', 'tel', 'search', 'password', 'number', 'email', ]).has(el.type)) { return 'typeable-input'; } else { return 'other-input'; } } if (el.isContentEditable) { return 'contenteditable'; } return 'unknown'; })) .pipe(mergeMap(inputType => { switch (inputType) { case 'select': return from(handle.select(value).then(noop)); case 'contenteditable': case 'typeable-input': return from(handle.evaluate((input, newValue) => { const currentValue = input.isContentEditable ? input.innerText : input.value; // Clear the input if the current value does not match the filled // out value. if (newValue.length <= currentValue.length || !newValue.startsWith(input.value)) { if (input.isContentEditable) { input.innerText = ''; } else { input.value = ''; } return newValue; } const originalValue = input.isContentEditable ? input.innerText : input.value; // If the value is partially filled out, only type the rest. Move // cursor to the end of the common prefix. if (input.isContentEditable) { input.innerText = ''; input.innerText = originalValue; } else { input.value = ''; input.value = originalValue; } return newValue.substring(originalValue.length); }, value)).pipe(mergeMap(textToType => { return from(handle.type(textToType)); })); case 'other-input': return from(handle.focus()).pipe(mergeMap(() => { return from(handle.evaluate((input, value) => { input.value = value; input.dispatchEvent(new Event('input', { bubbles: true })); input.dispatchEvent(new Event('change', { bubbles: true })); }, value)); })); case 'unknown': throw new Error(`Element cannot be filled out.`); } })) .pipe(catchError(err => { void handle.dispose().catch(debugError); throw err; })); }), this.operators.retryAndRaceWithSignalAndTimer(signal, cause)); } #hover(options) { const signal = options?.signal; const cause = new Error('Locator.hover'); return this._wait(options).pipe(this.operators.conditions([ this.#ensureElementIsInTheViewportIfNeeded, this.#waitForStableBoundingBoxIfNeeded, ], signal), tap(() => { return this.emit(LocatorEvent.Action, undefined); }), mergeMap(handle => { return from(handle.hover()).pipe(catchError(err => { void handle.dispose().catch(debugError); throw err; })); }), this.operators.retryAndRaceWithSignalAndTimer(signal, cause)); } #scroll(options) { const signal = options?.signal; const cause = new Error('Locator.scroll'); return this._wait(options).pipe(this.operators.conditions([ this.#ensureElementIsInTheViewportIfNeeded, this.#waitForStableBoundingBoxIfNeeded, ], signal), tap(() => { return this.emit(LocatorEvent.Action, undefined); }), mergeMap(handle => { return from(handle.evaluate((el, scrollTop, scrollLeft) => { if (scrollTop !== undefined) { el.scrollTop = scrollTop; } if (scrollLeft !== undefined) { el.scrollLeft = scrollLeft; } }, options?.scrollTop, options?.scrollLeft)).pipe(catchError(err => { void handle.dispose().catch(debugError); throw err; })); }), this.operators.retryAndRaceWithSignalAndTimer(signal, cause)); } /** * Clones the locator. */ clone() { return this._clone(); } /** * Waits for the locator to get a handle from the page. * * @public */ async waitHandle(options) { const cause = new Error('Locator.waitHandle'); return await firstValueFrom(this._wait(options).pipe(this.operators.retryAndRaceWithSignalAndTimer(options?.signal, cause))); } /** * Waits for the locator to get the serialized value from the page. * * Note this requires the value to be JSON-serializable. * * @public */ async wait(options) { const env_1 = { stack: [], error: void 0, hasError: false }; try { const handle = __addDisposableResource$5(env_1, await this.waitHandle(options), false); return await handle.jsonValue(); } catch (e_1) { env_1.error = e_1; env_1.hasError = true; } finally { __disposeResources$5(env_1); } } /** * Maps the locator using the provided mapper. * * @public */ map(mapper) { return new MappedLocator(this._clone(), handle => { // SAFETY: TypeScript cannot deduce the type. return handle.evaluateHandle(mapper); }); } /** * Creates an expectation that is evaluated against located values. * * If the expectations do not match, then the locator will retry. * * @public */ filter(predicate) { return new FilteredLocator(this._clone(), async (handle, signal) => { await handle.frame.waitForFunction(predicate, { signal, timeout: this._timeout }, handle); return true; }); } /** * Creates an expectation that is evaluated against located handles. * * If the expectations do not match, then the locator will retry. * * @internal */ filterHandle(predicate) { return new FilteredLocator(this._clone(), predicate); } /** * Maps the locator using the provided mapper. * * @internal */ mapHandle(mapper) { return new MappedLocator(this._clone(), mapper); } click(options) { return firstValueFrom(this.#click(options)); } /** * Fills out the input identified by the locator using the provided value. The * type of the input is determined at runtime and the appropriate fill-out * method is chosen based on the type. contenteditable, selector, inputs are * supported. */ fill(value, options) { return firstValueFrom(this.#fill(value, options)); } hover(options) { return firstValueFrom(this.#hover(options)); } scroll(options) { return firstValueFrom(this.#scroll(options)); } } /** * @internal */ class FunctionLocator extends Locator { static create(pageOrFrame, func) { return new FunctionLocator(pageOrFrame, func).setTimeout('getDefaultTimeout' in pageOrFrame ? pageOrFrame.getDefaultTimeout() : pageOrFrame.page().getDefaultTimeout()); } #pageOrFrame; #func; constructor(pageOrFrame, func) { super(); this.#pageOrFrame = pageOrFrame; this.#func = func; } _clone() { return new FunctionLocator(this.#pageOrFrame, this.#func); } _wait(options) { const signal = options?.signal; return defer(() => { return from(this.#pageOrFrame.waitForFunction(this.#func, { timeout: this.timeout, signal, })); }).pipe(throwIfEmpty()); } } /** * @internal */ class DelegatedLocator extends Locator { #delegate; constructor(delegate) { super(); this.#delegate = delegate; this.copyOptions(this.#delegate); } get delegate() { return this.#delegate; } setTimeout(timeout) { const locator = super.setTimeout(timeout); locator.#delegate = this.#delegate.setTimeout(timeout); return locator; } setVisibility(visibility) { const locator = super.setVisibility(visibility); locator.#delegate = locator.#delegate.setVisibility(visibility); return locator; } setWaitForEnabled(value) { const locator = super.setWaitForEnabled(value); locator.#delegate = this.#delegate.setWaitForEnabled(value); return locator; } setEnsureElementIsInTheViewport(value) { const locator = super.setEnsureElementIsInTheViewport(value); locator.#delegate = this.#delegate.setEnsureElementIsInTheViewport(value); return locator; } setWaitForStableBoundingBox(value) { const locator = super.setWaitForStableBoundingBox(value); locator.#delegate = this.#delegate.setWaitForStableBoundingBox(value); return locator; } } /** * @internal */ class FilteredLocator extends DelegatedLocator { #predicate; constructor(base, predicate) { super(base); this.#predicate = predicate; } _clone() { return new FilteredLocator(this.delegate.clone(), this.#predicate).copyOptions(this); } _wait(options) { return this.delegate._wait(options).pipe(mergeMap(handle => { return from(Promise.resolve(this.#predicate(handle, options?.signal))).pipe(filter(value => { return value; }), map(() => { // SAFETY: It passed the predicate, so this is correct. return handle; })); }), throwIfEmpty()); } } /** * @internal */ class MappedLocator extends DelegatedLocator { #mapper; constructor(base, mapper) { super(base); this.#mapper = mapper; } _clone() { return new MappedLocator(this.delegate.clone(), this.#mapper).copyOptions(this); } _wait(options) { return this.delegate._wait(options).pipe(mergeMap(handle => { return from(Promise.resolve(this.#mapper(handle, options?.signal))); })); } } /** * @internal */ class NodeLocator extends Locator { static create(pageOrFrame, selector) { return new NodeLocator(pageOrFrame, selector).setTimeout('getDefaultTimeout' in pageOrFrame ? pageOrFrame.getDefaultTimeout() : pageOrFrame.page().getDefaultTimeout()); } #pageOrFrame; #selector; constructor(pageOrFrame, selector) { super(); this.#pageOrFrame = pageOrFrame; this.#selector = selector; } /** * Waits for the element to become visible or hidden. visibility === 'visible' * means that the element has a computed style, the visibility property other * than 'hidden' or 'collapse' and non-empty bounding box. visibility === * 'hidden' means the opposite of that. */ #waitForVisibilityIfNeeded = (handle) => { if (!this.visibility) { return EMPTY; } return (() => { switch (this.visibility) { case 'hidden': return defer(() => { return from(handle.isHidden()); }); case 'visible': return defer(() => { return from(handle.isVisible()); }); } })().pipe(first(identity), retry({ delay: RETRY_DELAY }), ignoreElements()); }; _clone() { return new NodeLocator(this.#pageOrFrame, this.#selector).copyOptions(this); } _wait(options) { const signal = options?.signal; return defer(() => { return from(this.#pageOrFrame.waitForSelector(this.#selector, { visible: false, timeout: this._timeout, signal, })); }).pipe(filter((value) => { return value !== null; }), throwIfEmpty(), this.operators.conditions([this.#waitForVisibilityIfNeeded], signal)); } } function checkLocatorArray(locators) { for (const locator of locators) { if (!(locator instanceof Locator)) { throw new Error('Unknown locator for race candidate'); } } return locators; } /** * @internal */ class RaceLocator extends Locator { static create(locators) { const array = checkLocatorArray(locators); return new RaceLocator(array); } #locators; constructor(locators) { super(); this.#locators = locators; } _clone() { return new RaceLocator(this.#locators.map(locator => { return locator.clone(); })).copyOptions(this); } _wait(options) { return race(...this.#locators.map(locator => { return locator._wait(options); })); } } /** * For observables coming from promises, a delay is needed, otherwise RxJS will * never yield in a permanent failure for a promise. * * We also don't want RxJS to do promise operations to often, so we bump the * delay up to 100ms. * * @internal */ const RETRY_DELAY = 100; /** * @license * Copyright 2023 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ var __runInitializers$4 = (undefined && undefined.__runInitializers) || function (thisArg, initializers, value) { var useValue = arguments.length > 2; for (var i = 0; i < initializers.length; i++) { value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); } return useValue ? value : void 0; }; var __esDecorate$4 = (undefined && undefined.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); var _, done = false; for (var i = decorators.length - 1; i >= 0; i--) { var context = {}; for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; for (var p in contextIn.access) context.access[p] = contextIn.access[p]; context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); if (kind === "accessor") { if (result === void 0) continue; if (result === null || typeof result !== "object") throw new TypeError("Object expected"); if (_ = accept(result.get)) descriptor.get = _; if (_ = accept(result.set)) descriptor.set = _; if (_ = accept(result.init)) initializers.unshift(_); } else if (_ = accept(result)) { if (kind === "field") initializers.unshift(_); else descriptor[key] = _; } } if (target) Object.defineProperty(target, contextIn.name, descriptor); done = true; }; var __addDisposableResource$4 = (undefined && undefined.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); dispose = value[Symbol.asyncDispose]; } if (dispose === void 0) { if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined."); dispose = value[Symbol.dispose]; } if (typeof dispose !== "function") throw new TypeError("Object not disposable."); env.stack.push({ value: value, dispose: dispose, async: async }); } else if (async) { env.stack.push({ async: true }); } return value; }; var __disposeResources$4 = (undefined && undefined.__disposeResources) || (function (SuppressedError) { return function (env) { function fail(e) { env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e; env.hasError = true; } function next() { while (env.stack.length) { var rec = env.stack.pop(); try { var result = rec.dispose && rec.dispose.call(rec.value); if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); }); } catch (e) { fail(e); } } if (env.hasError) throw env.error; } return next(); }; })(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { var e = new Error(message); return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; }); /** * We use symbols to prevent external parties listening to these events. * They are internal to Puppeteer. * * @internal */ // eslint-disable-next-line @typescript-eslint/no-namespace var FrameEvent; (function (FrameEvent) { FrameEvent.FrameNavigated = Symbol('Frame.FrameNavigated'); FrameEvent.FrameSwapped = Symbol('Frame.FrameSwapped'); FrameEvent.LifecycleEvent = Symbol('Frame.LifecycleEvent'); FrameEvent.FrameNavigatedWithinDocument = Symbol('Frame.FrameNavigatedWithinDocument'); FrameEvent.FrameDetached = Symbol('Frame.FrameDetached'); FrameEvent.FrameSwappedByActivation = Symbol('Frame.FrameSwappedByActivation'); })(FrameEvent || (FrameEvent = {})); /** * @internal */ const throwIfDetached = throwIfDisposed(frame => { return `Attempted to use detached Frame '${frame._id}'.`; }); /** * Represents a DOM frame. * * To understand frames, you can think of frames as `