@remotion/renderer
Version:
Render Remotion videos using Node.js or Bun
59 lines (58 loc) • 3.29 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ensureBrowser = exports.internalEnsureBrowser = void 0;
const fs_1 = __importDefault(require("fs"));
const BrowserFetcher_1 = require("./browser/BrowserFetcher");
const browser_download_progress_bar_1 = require("./browser/browser-download-progress-bar");
let currentEnsureBrowserOperation = Promise.resolve();
const internalEnsureBrowserUncapped = async ({ indent, logLevel, browserExecutable, onBrowserDownload, chromeMode, }) => {
const status = getBrowserStatus({ browserExecutable, chromeMode });
if (status.type === 'no-browser') {
const { onProgress, version } = onBrowserDownload({ chromeMode });
await (0, BrowserFetcher_1.downloadBrowser)({ indent, logLevel, onProgress, version, chromeMode });
}
const newStatus = getBrowserStatus({ browserExecutable, chromeMode });
return newStatus;
};
const internalEnsureBrowser = (options) => {
currentEnsureBrowserOperation = currentEnsureBrowserOperation.then(() => internalEnsureBrowserUncapped(options));
return currentEnsureBrowserOperation;
};
exports.internalEnsureBrowser = internalEnsureBrowser;
const getBrowserStatus = ({ browserExecutable, chromeMode, }) => {
if (browserExecutable) {
if (!fs_1.default.existsSync(browserExecutable)) {
throw new Error(`"browserExecutable" was specified as '${browserExecutable}' but the path doesn't exist. Pass "null" for "browserExecutable" to download a browser automatically.`);
}
return { path: browserExecutable, type: 'user-defined-path' };
}
const revision = (0, BrowserFetcher_1.getRevisionInfo)(chromeMode);
if (revision.local && fs_1.default.existsSync(revision.executablePath)) {
return { path: revision.executablePath, type: 'local-puppeteer-browser' };
}
return { type: 'no-browser' };
};
/*
* @description Ensures a browser is locally installed so a Remotion render can be executed.
* @see [Documentation](https://www.remotion.dev/docs/renderer/ensure-browser)
*/
const ensureBrowser = (options) => {
var _a, _b, _c, _d, _e;
const indent = false;
const logLevel = (_a = options === null || options === void 0 ? void 0 : options.logLevel) !== null && _a !== void 0 ? _a : 'info';
return (0, exports.internalEnsureBrowser)({
browserExecutable: (_b = options === null || options === void 0 ? void 0 : options.browserExecutable) !== null && _b !== void 0 ? _b : null,
indent,
logLevel: (_c = options === null || options === void 0 ? void 0 : options.logLevel) !== null && _c !== void 0 ? _c : 'info',
onBrowserDownload: (_d = options === null || options === void 0 ? void 0 : options.onBrowserDownload) !== null && _d !== void 0 ? _d : (0, browser_download_progress_bar_1.defaultBrowserDownloadProgress)({
api: 'ensureBrowser()',
indent: false,
logLevel,
}),
chromeMode: (_e = options === null || options === void 0 ? void 0 : options.chromeMode) !== null && _e !== void 0 ? _e : 'headless-shell',
});
};
exports.ensureBrowser = ensureBrowser;