UNPKG

@remotion/renderer

Version:

Render Remotion videos using Node.js or Bun

188 lines (187 loc) • 8.77 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getCompositions = exports.internalGetCompositions = void 0; const no_react_1 = require("remotion/no-react"); const TimeoutSettings_1 = require("./browser/TimeoutSettings"); const browser_download_progress_bar_1 = require("./browser/browser-download-progress-bar"); const handle_javascript_exception_1 = require("./error-handling/handle-javascript-exception"); const find_closest_package_json_1 = require("./find-closest-package-json"); const get_browser_instance_1 = require("./get-browser-instance"); const offthreadvideo_threads_1 = require("./options/offthreadvideo-threads"); const prepare_server_1 = require("./prepare-server"); const puppeteer_evaluate_1 = require("./puppeteer-evaluate"); const seek_to_frame_1 = require("./seek-to-frame"); const set_props_and_env_1 = require("./set-props-and-env"); const validate_puppeteer_timeout_1 = require("./validate-puppeteer-timeout"); const wrap_with_error_handling_1 = require("./wrap-with-error-handling"); const innerGetCompositions = async ({ envVariables, serializedInputPropsWithCustomSchema, page, proxyPort, serveUrl, timeoutInMilliseconds, indent, logLevel, }) => { (0, validate_puppeteer_timeout_1.validatePuppeteerTimeout)(timeoutInMilliseconds); await (0, set_props_and_env_1.setPropsAndEnv)({ serializedInputPropsWithCustomSchema, envVariables, page, serveUrl, initialFrame: 0, timeoutInMilliseconds, proxyPort, retriesRemaining: 2, audioEnabled: false, videoEnabled: false, indent, logLevel, onServeUrlVisited: () => undefined, }); await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({ page, pageFunction: () => { window.remotion_setBundleMode({ type: 'evaluation', }); }, frame: null, args: [], timeoutInMilliseconds, }); await (0, seek_to_frame_1.waitForReady)({ page, timeoutInMilliseconds, frame: null, indent, logLevel, }); const { value: result } = await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({ pageFunction: () => { return window.getStaticCompositions(); }, frame: null, page, args: [], timeoutInMilliseconds, }); const res = result; return res.map((r) => { const { width, durationInFrames, fps, height, id, defaultCodec, defaultOutName, defaultVideoImageFormat, defaultPixelFormat, } = r; return { id, width, height, fps, durationInFrames, props: no_react_1.NoReactInternals.deserializeJSONWithSpecialTypes(r.serializedResolvedPropsWithCustomSchema), defaultProps: no_react_1.NoReactInternals.deserializeJSONWithSpecialTypes(r.serializedDefaultPropsWithCustomSchema), defaultCodec, defaultOutName, defaultVideoImageFormat, defaultPixelFormat, }; }); }; const internalGetCompositionsRaw = async ({ browserExecutable, chromiumOptions, envVariables, indent, serializedInputPropsWithCustomSchema, onBrowserLog, port, puppeteerInstance, serveUrlOrWebpackUrl, server, timeoutInMilliseconds, logLevel, offthreadVideoCacheSizeInBytes, binariesDirectory, onBrowserDownload, chromeMode, offthreadVideoThreads, }) => { const { page, cleanupPage } = await (0, get_browser_instance_1.getPageAndCleanupFn)({ passedInInstance: puppeteerInstance, browserExecutable, chromiumOptions, forceDeviceScaleFactor: undefined, indent, logLevel, onBrowserDownload, chromeMode, pageIndex: 0, onBrowserLog, }); const cleanup = [cleanupPage]; return new Promise((resolve, reject) => { const onError = (err) => reject(err); cleanup.push((0, handle_javascript_exception_1.handleJavascriptException)({ page, frame: null, onError, })); (0, prepare_server_1.makeOrReuseServer)(server, { webpackConfigOrServeUrl: serveUrlOrWebpackUrl, port, remotionRoot: (0, find_closest_package_json_1.findRemotionRoot)(), offthreadVideoThreads: offthreadVideoThreads !== null && offthreadVideoThreads !== void 0 ? offthreadVideoThreads : offthreadvideo_threads_1.DEFAULT_RENDER_FRAMES_OFFTHREAD_VIDEO_THREADS, logLevel, indent, offthreadVideoCacheSizeInBytes, binariesDirectory, forceIPv4: false, }, { onDownload: () => undefined, }) .then(({ server: { serveUrl, offthreadPort, sourceMap }, cleanupServer }) => { page.setBrowserSourceMapGetter(sourceMap); cleanup.push(() => { return cleanupServer(true); }); return innerGetCompositions({ envVariables, serializedInputPropsWithCustomSchema, page, proxyPort: offthreadPort, serveUrl, timeoutInMilliseconds, indent, logLevel, offthreadVideoCacheSizeInBytes, binariesDirectory, onBrowserDownload, chromeMode, offthreadVideoThreads, }); }) .then((comp) => { return resolve(comp); }) .catch((err) => { reject(err); }) .finally(() => { cleanup.forEach((c) => { c(); }); }); }); }; exports.internalGetCompositions = (0, wrap_with_error_handling_1.wrapWithErrorHandling)(internalGetCompositionsRaw); /* * @description Gets a list of compositions defined in a Remotion project based on a Remotion Bundle by evaluating the Remotion Root. * @see [Documentation](https://www.remotion.dev/docs/renderer/get-compositions) */ const getCompositions = (serveUrlOrWebpackUrl, config) => { if (!serveUrlOrWebpackUrl) { throw new Error('No serve URL or webpack bundle directory was passed to getCompositions().'); } const { browserExecutable, chromiumOptions, envVariables, inputProps, onBrowserLog, port, puppeteerInstance, timeoutInMilliseconds, logLevel: passedLogLevel, onBrowserDownload, binariesDirectory, offthreadVideoCacheSizeInBytes, chromeMode, offthreadVideoThreads, } = config !== null && config !== void 0 ? config : {}; const indent = false; const logLevel = passedLogLevel !== null && passedLogLevel !== void 0 ? passedLogLevel : 'info'; return (0, exports.internalGetCompositions)({ browserExecutable: browserExecutable !== null && browserExecutable !== void 0 ? browserExecutable : null, chromiumOptions: chromiumOptions !== null && chromiumOptions !== void 0 ? chromiumOptions : {}, envVariables: envVariables !== null && envVariables !== void 0 ? envVariables : {}, serializedInputPropsWithCustomSchema: no_react_1.NoReactInternals.serializeJSONWithSpecialTypes({ data: inputProps !== null && inputProps !== void 0 ? inputProps : {}, indent: undefined, staticBase: null, }).serializedString, indent, onBrowserLog: onBrowserLog !== null && onBrowserLog !== void 0 ? onBrowserLog : null, port: port !== null && port !== void 0 ? port : null, puppeteerInstance: puppeteerInstance !== null && puppeteerInstance !== void 0 ? puppeteerInstance : undefined, serveUrlOrWebpackUrl, server: undefined, timeoutInMilliseconds: timeoutInMilliseconds !== null && timeoutInMilliseconds !== void 0 ? timeoutInMilliseconds : TimeoutSettings_1.DEFAULT_TIMEOUT, logLevel, offthreadVideoCacheSizeInBytes: offthreadVideoCacheSizeInBytes !== null && offthreadVideoCacheSizeInBytes !== void 0 ? offthreadVideoCacheSizeInBytes : null, binariesDirectory: binariesDirectory !== null && binariesDirectory !== void 0 ? binariesDirectory : null, onBrowserDownload: onBrowserDownload !== null && onBrowserDownload !== void 0 ? onBrowserDownload : (0, browser_download_progress_bar_1.defaultBrowserDownloadProgress)({ indent, logLevel, api: 'getCompositions()', }), chromeMode: chromeMode !== null && chromeMode !== void 0 ? chromeMode : 'headless-shell', offthreadVideoThreads: offthreadVideoThreads !== null && offthreadVideoThreads !== void 0 ? offthreadVideoThreads : null, }); }; exports.getCompositions = getCompositions;