UNPKG

@remotion/renderer

Version:

Render Remotion videos using Node.js or Bun

181 lines (180 loc) • 14.4 kB
"use strict"; /** * Copyright 2019 Google Inc. All rights reserved. * * 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. */ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _LifecycleWatcher_instances, _LifecycleWatcher_expectedLifecycle, _LifecycleWatcher_frameManager, _LifecycleWatcher_frame, _LifecycleWatcher_timeout, _LifecycleWatcher_navigationRequest, _LifecycleWatcher_eventListeners, _LifecycleWatcher_sameDocumentNavigationCompleteCallback, _LifecycleWatcher_sameDocumentNavigationPromise, _LifecycleWatcher_lifecycleCallback, _LifecycleWatcher_lifecyclePromise, _LifecycleWatcher_newDocumentNavigationCompleteCallback, _LifecycleWatcher_newDocumentNavigationPromise, _LifecycleWatcher_terminationCallback, _LifecycleWatcher_terminationPromise, _LifecycleWatcher_timeoutPromise, _LifecycleWatcher_maximumTimer, _LifecycleWatcher_hasSameDocumentNavigation, _LifecycleWatcher_newDocumentNavigation, _LifecycleWatcher_swapped, _LifecycleWatcher_onRequest, _LifecycleWatcher_onFrameDetached, _LifecycleWatcher_terminate, _LifecycleWatcher_createTimeoutPromise, _LifecycleWatcher_navigatedWithinDocument, _LifecycleWatcher_navigated, _LifecycleWatcher_frameSwapped, _LifecycleWatcher_checkLifecycleComplete; Object.defineProperty(exports, "__esModule", { value: true }); exports.LifecycleWatcher = void 0; const assert_1 = require("./assert"); const Connection_1 = require("./Connection"); const Errors_1 = require("./Errors"); const FrameManager_1 = require("./FrameManager"); const NetworkManager_1 = require("./NetworkManager"); const util_1 = require("./util"); const puppeteerToProtocolLifecycle = new Map([['load', 'load']]); const noop = () => undefined; class LifecycleWatcher { constructor(frameManager, frame, waitUntil, timeout) { _LifecycleWatcher_instances.add(this); _LifecycleWatcher_expectedLifecycle.set(this, void 0); _LifecycleWatcher_frameManager.set(this, void 0); _LifecycleWatcher_frame.set(this, void 0); _LifecycleWatcher_timeout.set(this, void 0); _LifecycleWatcher_navigationRequest.set(this, null); _LifecycleWatcher_eventListeners.set(this, void 0); _LifecycleWatcher_sameDocumentNavigationCompleteCallback.set(this, noop); _LifecycleWatcher_sameDocumentNavigationPromise.set(this, new Promise((fulfill) => { __classPrivateFieldSet(this, _LifecycleWatcher_sameDocumentNavigationCompleteCallback, fulfill, "f"); })); _LifecycleWatcher_lifecycleCallback.set(this, noop); _LifecycleWatcher_lifecyclePromise.set(this, new Promise((fulfill) => { __classPrivateFieldSet(this, _LifecycleWatcher_lifecycleCallback, fulfill, "f"); })); _LifecycleWatcher_newDocumentNavigationCompleteCallback.set(this, noop); _LifecycleWatcher_newDocumentNavigationPromise.set(this, new Promise((fulfill) => { __classPrivateFieldSet(this, _LifecycleWatcher_newDocumentNavigationCompleteCallback, fulfill, "f"); })); _LifecycleWatcher_terminationCallback.set(this, noop); _LifecycleWatcher_terminationPromise.set(this, new Promise((fulfill) => { __classPrivateFieldSet(this, _LifecycleWatcher_terminationCallback, fulfill, "f"); })); _LifecycleWatcher_timeoutPromise.set(this, void 0); _LifecycleWatcher_maximumTimer.set(this, void 0); _LifecycleWatcher_hasSameDocumentNavigation.set(this, void 0); _LifecycleWatcher_newDocumentNavigation.set(this, void 0); _LifecycleWatcher_swapped.set(this, void 0); const protocolEvent = puppeteerToProtocolLifecycle.get(waitUntil); (0, assert_1.assert)(protocolEvent, 'Unknown value for options.waitUntil: ' + waitUntil); __classPrivateFieldSet(this, _LifecycleWatcher_expectedLifecycle, [waitUntil], "f"); __classPrivateFieldSet(this, _LifecycleWatcher_frameManager, frameManager, "f"); __classPrivateFieldSet(this, _LifecycleWatcher_frame, frame, "f"); __classPrivateFieldSet(this, _LifecycleWatcher_timeout, timeout, "f"); __classPrivateFieldSet(this, _LifecycleWatcher_eventListeners, [ (0, util_1.addEventListener)(frameManager._client, Connection_1.CDPSessionEmittedEvents.Disconnected, __classPrivateFieldGet(this, _LifecycleWatcher_instances, "m", _LifecycleWatcher_terminate).bind(this, new Error('Navigation failed because browser has disconnected!'))), (0, util_1.addEventListener)(__classPrivateFieldGet(this, _LifecycleWatcher_frameManager, "f"), FrameManager_1.FrameManagerEmittedEvents.LifecycleEvent, __classPrivateFieldGet(this, _LifecycleWatcher_instances, "m", _LifecycleWatcher_checkLifecycleComplete).bind(this)), (0, util_1.addEventListener)(__classPrivateFieldGet(this, _LifecycleWatcher_frameManager, "f"), FrameManager_1.FrameManagerEmittedEvents.FrameNavigatedWithinDocument, __classPrivateFieldGet(this, _LifecycleWatcher_instances, "m", _LifecycleWatcher_navigatedWithinDocument).bind(this)), (0, util_1.addEventListener)(__classPrivateFieldGet(this, _LifecycleWatcher_frameManager, "f"), FrameManager_1.FrameManagerEmittedEvents.FrameNavigated, __classPrivateFieldGet(this, _LifecycleWatcher_instances, "m", _LifecycleWatcher_navigated).bind(this)), (0, util_1.addEventListener)(__classPrivateFieldGet(this, _LifecycleWatcher_frameManager, "f"), FrameManager_1.FrameManagerEmittedEvents.FrameSwapped, __classPrivateFieldGet(this, _LifecycleWatcher_instances, "m", _LifecycleWatcher_frameSwapped).bind(this)), (0, util_1.addEventListener)(__classPrivateFieldGet(this, _LifecycleWatcher_frameManager, "f"), FrameManager_1.FrameManagerEmittedEvents.FrameDetached, __classPrivateFieldGet(this, _LifecycleWatcher_instances, "m", _LifecycleWatcher_onFrameDetached).bind(this)), (0, util_1.addEventListener)(__classPrivateFieldGet(this, _LifecycleWatcher_frameManager, "f").networkManager(), NetworkManager_1.NetworkManagerEmittedEvents.Request, __classPrivateFieldGet(this, _LifecycleWatcher_instances, "m", _LifecycleWatcher_onRequest).bind(this)), ], "f"); __classPrivateFieldSet(this, _LifecycleWatcher_timeoutPromise, __classPrivateFieldGet(this, _LifecycleWatcher_instances, "m", _LifecycleWatcher_createTimeoutPromise).call(this), "f"); __classPrivateFieldGet(this, _LifecycleWatcher_instances, "m", _LifecycleWatcher_checkLifecycleComplete).call(this); } navigationResponse() { if (!__classPrivateFieldGet(this, _LifecycleWatcher_navigationRequest, "f")) { return null; } const res = __classPrivateFieldGet(this, _LifecycleWatcher_navigationRequest, "f").response(); return res; } sameDocumentNavigationPromise() { return __classPrivateFieldGet(this, _LifecycleWatcher_sameDocumentNavigationPromise, "f"); } newDocumentNavigationPromise() { return __classPrivateFieldGet(this, _LifecycleWatcher_newDocumentNavigationPromise, "f"); } lifecyclePromise() { return __classPrivateFieldGet(this, _LifecycleWatcher_lifecyclePromise, "f"); } timeoutOrTerminationPromise() { return Promise.race([__classPrivateFieldGet(this, _LifecycleWatcher_timeoutPromise, "f"), __classPrivateFieldGet(this, _LifecycleWatcher_terminationPromise, "f")]); } dispose() { (0, util_1.removeEventListeners)(__classPrivateFieldGet(this, _LifecycleWatcher_eventListeners, "f")); if (__classPrivateFieldGet(this, _LifecycleWatcher_maximumTimer, "f") !== undefined) { clearTimeout(__classPrivateFieldGet(this, _LifecycleWatcher_maximumTimer, "f")); } } } exports.LifecycleWatcher = LifecycleWatcher; _LifecycleWatcher_expectedLifecycle = new WeakMap(), _LifecycleWatcher_frameManager = new WeakMap(), _LifecycleWatcher_frame = new WeakMap(), _LifecycleWatcher_timeout = new WeakMap(), _LifecycleWatcher_navigationRequest = new WeakMap(), _LifecycleWatcher_eventListeners = new WeakMap(), _LifecycleWatcher_sameDocumentNavigationCompleteCallback = new WeakMap(), _LifecycleWatcher_sameDocumentNavigationPromise = new WeakMap(), _LifecycleWatcher_lifecycleCallback = new WeakMap(), _LifecycleWatcher_lifecyclePromise = new WeakMap(), _LifecycleWatcher_newDocumentNavigationCompleteCallback = new WeakMap(), _LifecycleWatcher_newDocumentNavigationPromise = new WeakMap(), _LifecycleWatcher_terminationCallback = new WeakMap(), _LifecycleWatcher_terminationPromise = new WeakMap(), _LifecycleWatcher_timeoutPromise = new WeakMap(), _LifecycleWatcher_maximumTimer = new WeakMap(), _LifecycleWatcher_hasSameDocumentNavigation = new WeakMap(), _LifecycleWatcher_newDocumentNavigation = new WeakMap(), _LifecycleWatcher_swapped = new WeakMap(), _LifecycleWatcher_instances = new WeakSet(), _LifecycleWatcher_onRequest = function _LifecycleWatcher_onRequest(request) { if (request.frame() !== __classPrivateFieldGet(this, _LifecycleWatcher_frame, "f") || !request.isNavigationRequest()) { return; } __classPrivateFieldSet(this, _LifecycleWatcher_navigationRequest, request, "f"); }, _LifecycleWatcher_onFrameDetached = function _LifecycleWatcher_onFrameDetached(frame) { if (__classPrivateFieldGet(this, _LifecycleWatcher_frame, "f") === frame) { __classPrivateFieldGet(this, _LifecycleWatcher_terminationCallback, "f").call(null, new Error('Navigating frame was detached')); return; } __classPrivateFieldGet(this, _LifecycleWatcher_instances, "m", _LifecycleWatcher_checkLifecycleComplete).call(this); }, _LifecycleWatcher_terminate = function _LifecycleWatcher_terminate(error) { __classPrivateFieldGet(this, _LifecycleWatcher_terminationCallback, "f").call(null, error); }, _LifecycleWatcher_createTimeoutPromise = async function _LifecycleWatcher_createTimeoutPromise() { if (!__classPrivateFieldGet(this, _LifecycleWatcher_timeout, "f")) { return new Promise(noop); } const errorMessage = 'Navigation timeout of ' + __classPrivateFieldGet(this, _LifecycleWatcher_timeout, "f") + ' ms exceeded'; await new Promise((fulfill) => { __classPrivateFieldSet(this, _LifecycleWatcher_maximumTimer, setTimeout(fulfill, __classPrivateFieldGet(this, _LifecycleWatcher_timeout, "f")), "f"); }); return new Errors_1.TimeoutError(errorMessage); }, _LifecycleWatcher_navigatedWithinDocument = function _LifecycleWatcher_navigatedWithinDocument(frame) { if (frame !== __classPrivateFieldGet(this, _LifecycleWatcher_frame, "f")) { return; } __classPrivateFieldSet(this, _LifecycleWatcher_hasSameDocumentNavigation, true, "f"); __classPrivateFieldGet(this, _LifecycleWatcher_instances, "m", _LifecycleWatcher_checkLifecycleComplete).call(this); }, _LifecycleWatcher_navigated = function _LifecycleWatcher_navigated(frame) { if (frame !== __classPrivateFieldGet(this, _LifecycleWatcher_frame, "f")) { return; } __classPrivateFieldSet(this, _LifecycleWatcher_newDocumentNavigation, true, "f"); __classPrivateFieldGet(this, _LifecycleWatcher_instances, "m", _LifecycleWatcher_checkLifecycleComplete).call(this); }, _LifecycleWatcher_frameSwapped = function _LifecycleWatcher_frameSwapped(frame) { if (frame !== __classPrivateFieldGet(this, _LifecycleWatcher_frame, "f")) { return; } __classPrivateFieldSet(this, _LifecycleWatcher_swapped, true, "f"); __classPrivateFieldGet(this, _LifecycleWatcher_instances, "m", _LifecycleWatcher_checkLifecycleComplete).call(this); }, _LifecycleWatcher_checkLifecycleComplete = function _LifecycleWatcher_checkLifecycleComplete() { // We expect navigation to commit. if (!checkLifecycle(__classPrivateFieldGet(this, _LifecycleWatcher_frame, "f"), __classPrivateFieldGet(this, _LifecycleWatcher_expectedLifecycle, "f"))) { return; } __classPrivateFieldGet(this, _LifecycleWatcher_lifecycleCallback, "f").call(this); if (__classPrivateFieldGet(this, _LifecycleWatcher_hasSameDocumentNavigation, "f")) { __classPrivateFieldGet(this, _LifecycleWatcher_sameDocumentNavigationCompleteCallback, "f").call(this); } if (__classPrivateFieldGet(this, _LifecycleWatcher_swapped, "f") || __classPrivateFieldGet(this, _LifecycleWatcher_newDocumentNavigation, "f")) { __classPrivateFieldGet(this, _LifecycleWatcher_newDocumentNavigationCompleteCallback, "f").call(this); } function checkLifecycle(frame, expectedLifecycle) { for (const event of expectedLifecycle) { if (!frame._lifecycleEvents.has(event)) { return false; } } for (const child of frame.childFrames()) { if (child._hasStartedLoading && !checkLifecycle(child, expectedLifecycle)) { return false; } } return true; } };