@remotion/browser-bundler 4.0.527

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,689 @@
1
+ var __create = Object.create;
2
+ var __getProtoOf = Object.getPrototypeOf;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __toESM = (mod, isNodeMode, target) => {
7
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
8
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
9
+ for (let key of __getOwnPropNames(mod))
10
+ if (!__hasOwnProp.call(to, key))
11
+ __defProp(to, key, {
12
+ get: () => mod[key],
13
+ enumerable: true
14
+ });
15
+ return to;
16
+ };
17
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
18
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
19
+ }) : x)(function(x) {
20
+ if (typeof require !== "undefined")
21
+ return require.apply(this, arguments);
22
+ throw Error('Dynamic require of "' + x + '" is not supported');
23
+ });
24
+
25
+ // src/create-browser-bundle-runtime.ts
26
+ import { Internals } from "remotion";
27
+
28
+ // src/browser-module-scope.ts
29
+ import * as React from "react";
30
+ import * as ReactDOM from "react-dom";
31
+ import * as ReactDOMClient from "react-dom/client";
32
+ import * as JSXDevRuntime from "react/jsx-dev-runtime";
33
+ import * as JSXRuntime from "react/jsx-runtime";
34
+ import * as Remotion from "remotion";
35
+ import * as RemotionNoReact from "remotion/no-react";
36
+ import * as RemotionVersion from "remotion/version";
37
+ var createBrowserModuleScope = (additionalModules) => {
38
+ let root = null;
39
+ let registrations = 0;
40
+ const registerRoot = (component) => {
41
+ if (!component || React.isValidElement(component) || typeof component !== "function" && (typeof component !== "object" || !("$$typeof" in component))) {
42
+ throw new Error("registerRoot() must receive a React component.");
43
+ }
44
+ if (registrations > 0) {
45
+ throw new Error("registerRoot() was called more than once.");
46
+ }
47
+ registrations++;
48
+ root = component;
49
+ };
50
+ const sharedModules = new Map([
51
+ ["react", React],
52
+ ["react-dom", ReactDOM],
53
+ ["react-dom/client", ReactDOMClient],
54
+ ["react/jsx-runtime", JSXRuntime],
55
+ ["react/jsx-dev-runtime", JSXDevRuntime],
56
+ ["remotion", { ...Remotion, registerRoot }],
57
+ ["remotion/no-react", RemotionNoReact],
58
+ ["remotion/version", RemotionVersion],
59
+ ...additionalModules ?? []
60
+ ]);
61
+ const resolveModule = (id) => {
62
+ if (!sharedModules.has(id)) {
63
+ throw new Error(`The browser bundle requested an unavailable shared module: "${id}".`);
64
+ }
65
+ return sharedModules.get(id);
66
+ };
67
+ return {
68
+ resolveModule,
69
+ beginUpdate: () => {
70
+ registrations = 0;
71
+ },
72
+ getRoot: () => {
73
+ if (root === null) {
74
+ throw new Error("The browser bundle did not call registerRoot(). Use a normal Remotion project entry point.");
75
+ }
76
+ return root;
77
+ },
78
+ evaluate: (code) => {
79
+ registrations = 0;
80
+ try {
81
+ const evaluate = new Function("require", `${code}
82
+ //# sourceURL=remotion-browser-bundle.js`);
83
+ evaluate(resolveModule);
84
+ } catch (error) {
85
+ throw new Error(`Could not evaluate the browser bundle: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
86
+ }
87
+ }
88
+ };
89
+ };
90
+
91
+ // src/fast-refresh-bridge.ts
92
+ var browserBundleHmrBridgeName = "remotion_browserBundlerHmr";
93
+ var browserBundleHotUpdateName = "remotion_browserBundlerHotUpdate";
94
+
95
+ // src/hmr-assets.ts
96
+ var getAssetName = (nameOrUrl) => {
97
+ const url = new URL(nameOrUrl, "https://remotion.invalid");
98
+ return url.pathname.split("/").at(-1) ?? "";
99
+ };
100
+ var createBrowserHmrAssetManager = ({
101
+ createObjectUrl,
102
+ revokeObjectUrl
103
+ }) => {
104
+ const assets = new Map;
105
+ const updateAssets = (newAssets) => {
106
+ const nextAssetNames = new Set(newAssets.map((asset) => getAssetName(asset.name)));
107
+ for (const [name, asset] of assets) {
108
+ if (nextAssetNames.has(name)) {
109
+ continue;
110
+ }
111
+ if (asset.objectUrl) {
112
+ revokeObjectUrl(asset.objectUrl);
113
+ }
114
+ assets.delete(name);
115
+ }
116
+ for (const asset of newAssets) {
117
+ const name = getAssetName(asset.name);
118
+ const previous = assets.get(name);
119
+ if (previous?.objectUrl) {
120
+ revokeObjectUrl(previous.objectUrl);
121
+ }
122
+ assets.set(name, { content: asset.content, objectUrl: null });
123
+ }
124
+ };
125
+ const bridge = {
126
+ getManifest: (name) => {
127
+ const asset = assets.get(getAssetName(name));
128
+ if (!asset) {
129
+ return Promise.resolve(undefined);
130
+ }
131
+ return Promise.resolve(JSON.parse(asset.content));
132
+ },
133
+ resolveScriptUrl: (name) => {
134
+ const assetName = getAssetName(name);
135
+ const asset = assets.get(assetName);
136
+ if (!asset) {
137
+ throw new Error(`Missing browser HMR asset: ${assetName}`);
138
+ }
139
+ asset.objectUrl ??= createObjectUrl(new Blob([asset.content], { type: "text/javascript" }));
140
+ return asset.objectUrl;
141
+ }
142
+ };
143
+ return {
144
+ bridge,
145
+ dispose: () => {
146
+ for (const asset of assets.values()) {
147
+ if (asset.objectUrl) {
148
+ revokeObjectUrl(asset.objectUrl);
149
+ }
150
+ }
151
+ assets.clear();
152
+ },
153
+ updateAssets
154
+ };
155
+ };
156
+
157
+ // src/create-browser-bundle-runtime.ts
158
+ var createBrowserBundleRuntime = () => {
159
+ if (typeof document === "undefined" || !document.body) {
160
+ throw new Error("createBrowserBundleRuntime() must be called in a browser.");
161
+ }
162
+ if (Object.hasOwn(globalThis, browserBundleHmrBridgeName)) {
163
+ throw new Error("Only one Fast Refresh runtime can use a preview document.");
164
+ }
165
+ const assets = createBrowserHmrAssetManager({
166
+ createObjectUrl: (blob) => URL.createObjectURL(blob),
167
+ revokeObjectUrl: (url) => URL.revokeObjectURL(url)
168
+ });
169
+ let hotRuntime = null;
170
+ let scope = null;
171
+ let sessionId = null;
172
+ let disposed = false;
173
+ let ownsComponentIdentityResolver = false;
174
+ let queue = Promise.resolve();
175
+ const previousRequire = Object.getOwnPropertyDescriptor(globalThis, "require");
176
+ const previousHotUpdate = Object.getOwnPropertyDescriptor(globalThis, browserBundleHotUpdateName);
177
+ const bridge = {
178
+ ...assets.bridge,
179
+ setHotRuntime: (runtime) => {
180
+ hotRuntime = runtime;
181
+ }
182
+ };
183
+ Object.defineProperty(globalThis, browserBundleHmrBridgeName, {
184
+ configurable: true,
185
+ value: bridge
186
+ });
187
+ const getHotRuntime = () => {
188
+ if (hotRuntime === null) {
189
+ throw new Error("The browser bundle did not initialize its HMR runtime.");
190
+ }
191
+ return hotRuntime;
192
+ };
193
+ return {
194
+ applyBundle: (bundle) => {
195
+ const run = queue.then(async () => {
196
+ if (disposed) {
197
+ throw new Error("The browser bundle runtime was disposed.");
198
+ }
199
+ const update = bundle.fastRefresh;
200
+ if (!update) {
201
+ throw new Error("Create the bundler with enableFastRefresh: true before applying bundles.");
202
+ }
203
+ if (sessionId !== null && sessionId !== update.sessionId) {
204
+ throw new Error("The compiler session changed. Create a new preview runtime for the new project.");
205
+ }
206
+ const { default: refresh } = await import("react-refresh/runtime");
207
+ if (disposed) {
208
+ throw new Error("The browser bundle runtime was disposed.");
209
+ }
210
+ if (typeof refresh.performReactRefresh !== "function") {
211
+ throw new Error("Fast Refresh requires a development React renderer in the preview document.");
212
+ }
213
+ if (scope === null) {
214
+ const hook = Reflect.get(globalThis, "__REACT_DEVTOOLS_GLOBAL_HOOK__");
215
+ if (hook === null || typeof hook !== "object" || !("renderers" in hook) || !(hook.renderers instanceof Map) || "isDisabled" in hook && hook.isDisabled) {
216
+ throw new Error("Inject the React Refresh hook before importing the development preview renderer.");
217
+ }
218
+ const renderers = [...hook.renderers.values()];
219
+ if (renderers.length > 0 && !renderers.some((renderer) => renderer !== null && typeof renderer === "object" && ("scheduleRefresh" in renderer) && typeof renderer.scheduleRefresh === "function" && ("setRefreshHandler" in renderer) && typeof renderer.setRefreshHandler === "function")) {
220
+ throw new Error("Fast Refresh requires development React DOM. Inject the React Refresh hook before importing the preview renderer.");
221
+ }
222
+ const initialScope = createBrowserModuleScope(new Map([["react-refresh/runtime", refresh]]));
223
+ Internals.setComponentIdentityResolver((component) => refresh.getFamilyByType(component) ?? component);
224
+ ownsComponentIdentityResolver = true;
225
+ Object.defineProperty(globalThis, "require", {
226
+ configurable: true,
227
+ value: initialScope.resolveModule
228
+ });
229
+ initialScope.evaluate(bundle.code);
230
+ initialScope.getRoot();
231
+ scope = initialScope;
232
+ sessionId = update.sessionId;
233
+ } else {
234
+ const hot = getHotRuntime();
235
+ if (hot.getHash() === update.hash) {
236
+ return scope.getRoot();
237
+ }
238
+ if (hot.getHash() !== update.previousHash) {
239
+ throw new Error("Fast Refresh bundles must be applied in compilation order. A compiled update was skipped.");
240
+ }
241
+ if (hot.status() !== "idle") {
242
+ throw new Error(`Cannot apply a Fast Refresh update while HMR is "${hot.status()}".`);
243
+ }
244
+ assets.updateAssets(update.assets);
245
+ scope.beginUpdate();
246
+ const changedModules = await hot.check();
247
+ if (disposed) {
248
+ throw new Error("The browser bundle runtime was disposed.");
249
+ }
250
+ if (changedModules === null) {
251
+ throw new Error("Rspack could not find the Fast Refresh update.");
252
+ }
253
+ await hot.apply();
254
+ if (disposed) {
255
+ throw new Error("The browser bundle runtime was disposed.");
256
+ }
257
+ refresh.performReactRefresh();
258
+ }
259
+ if (disposed) {
260
+ throw new Error("The browser bundle runtime was disposed.");
261
+ }
262
+ if (getHotRuntime().getHash() !== update.hash) {
263
+ throw new Error("Rspack did not apply the expected Fast Refresh update.");
264
+ }
265
+ return scope.getRoot();
266
+ });
267
+ queue = run.then(() => {
268
+ return;
269
+ }, () => {
270
+ return;
271
+ });
272
+ return run;
273
+ },
274
+ dispose: () => {
275
+ if (disposed) {
276
+ return;
277
+ }
278
+ disposed = true;
279
+ if (ownsComponentIdentityResolver) {
280
+ Internals.setComponentIdentityResolver(null);
281
+ }
282
+ assets.dispose();
283
+ Reflect.deleteProperty(globalThis, browserBundleHmrBridgeName);
284
+ if (previousRequire) {
285
+ Object.defineProperty(globalThis, "require", previousRequire);
286
+ } else {
287
+ Reflect.deleteProperty(globalThis, "require");
288
+ }
289
+ if (previousHotUpdate) {
290
+ Object.defineProperty(globalThis, browserBundleHotUpdateName, previousHotUpdate);
291
+ } else {
292
+ Reflect.deleteProperty(globalThis, browserBundleHotUpdateName);
293
+ }
294
+ }
295
+ };
296
+ };
297
+ // src/create-browser-composition-observer.tsx
298
+ import React2, { Suspense, useEffect, useMemo, useState } from "react";
299
+ import { createRoot } from "react-dom/client";
300
+ import { Internals as Internals2 } from "remotion";
301
+ import { jsx, jsxs } from "react/jsx-runtime";
302
+ var environment = {
303
+ isClientSideRendering: false,
304
+ isPlayer: false,
305
+ isReadOnlyStudio: false,
306
+ isRendering: false,
307
+ isStudio: false
308
+ };
309
+
310
+ class RegistrationErrorBoundary extends React2.Component {
311
+ state = { failed: false, revision: this.props.revision };
312
+ static getDerivedStateFromProps(props, state) {
313
+ return props.revision === state.revision ? null : { failed: false, revision: props.revision };
314
+ }
315
+ static getDerivedStateFromError() {
316
+ return { failed: true };
317
+ }
318
+ componentDidCatch(error) {
319
+ this.props.onError(error, this.props.revision);
320
+ }
321
+ render() {
322
+ return this.state.failed ? null : this.props.children;
323
+ }
324
+ }
325
+ var RegistrationCommitted = ({ revision, onCommit }) => {
326
+ useEffect(() => onCommit(revision), [onCommit, revision]);
327
+ return null;
328
+ };
329
+ var ObserveMetadata = ({
330
+ composition,
331
+ compositionId,
332
+ inputProps,
333
+ revision,
334
+ registeredRevision,
335
+ onChange,
336
+ onError
337
+ }) => {
338
+ useEffect(() => {
339
+ if (registeredRevision !== revision) {
340
+ return;
341
+ }
342
+ if (!composition) {
343
+ onError(new Error(`No composition with ID "${compositionId}" is registered.`), revision);
344
+ return;
345
+ }
346
+ const controller = new AbortController;
347
+ const defaultProps = composition.defaultProps ?? {};
348
+ try {
349
+ const config = Internals2.resolveVideoConfig({
350
+ compositionId,
351
+ compositionWidth: composition.width ?? null,
352
+ compositionHeight: composition.height ?? null,
353
+ compositionFps: composition.fps ?? null,
354
+ compositionDurationInFrames: composition.durationInFrames ?? null,
355
+ calculateMetadata: composition.calculateMetadata,
356
+ defaultProps,
357
+ inputProps: { ...defaultProps, ...inputProps },
358
+ signal: controller.signal
359
+ });
360
+ Promise.resolve(config).then((videoConfig) => {
361
+ if (!controller.signal.aborted) {
362
+ onChange({ ...videoConfig, component: composition.component }, revision);
363
+ }
364
+ }, (error) => {
365
+ if (!controller.signal.aborted) {
366
+ onError(error, revision);
367
+ }
368
+ });
369
+ } catch (error) {
370
+ onError(error, revision);
371
+ }
372
+ return () => controller.abort();
373
+ }, [
374
+ composition,
375
+ compositionId,
376
+ inputProps,
377
+ onChange,
378
+ onError,
379
+ registeredRevision,
380
+ revision
381
+ ]);
382
+ return null;
383
+ };
384
+ var ObserveComposition = ({
385
+ root: RegisteredRoot,
386
+ compositionId,
387
+ inputProps,
388
+ revision,
389
+ onChange,
390
+ onError
391
+ }) => {
392
+ const [registeredRevision, setRegisteredRevision] = useState(null);
393
+ const [compositions, setCompositions] = useState([]);
394
+ const setters = useMemo(() => ({
395
+ registerComposition: (composition) => {
396
+ setCompositions((current) => {
397
+ if (current.some(({ id }) => id === composition.id)) {
398
+ throw new Error(`A composition with ID "${composition.id}" was registered more than once.`);
399
+ }
400
+ return [...current, composition];
401
+ });
402
+ },
403
+ unregisterComposition: (id) => {
404
+ setCompositions((current) => current.filter((composition) => composition.id !== id));
405
+ },
406
+ registerFolder: () => {
407
+ return;
408
+ },
409
+ unregisterFolder: () => {
410
+ return;
411
+ },
412
+ setCanvasContent: () => {
413
+ return;
414
+ },
415
+ setCurrentAssetMetadata: () => {
416
+ return;
417
+ },
418
+ onlyRenderComposition: null
419
+ }), []);
420
+ const registration = useMemo(() => /* @__PURE__ */ jsxs(Suspense, {
421
+ fallback: null,
422
+ children: [
423
+ /* @__PURE__ */ jsx(RegisteredRoot, {}),
424
+ /* @__PURE__ */ jsx(RegistrationCommitted, {
425
+ revision,
426
+ onCommit: setRegisteredRevision
427
+ })
428
+ ]
429
+ }), [RegisteredRoot, revision]);
430
+ return /* @__PURE__ */ jsx(Internals2.RemotionEnvironmentContext.Provider, {
431
+ value: environment,
432
+ children: /* @__PURE__ */ jsxs(Internals2.CompositionSetters.Provider, {
433
+ value: setters,
434
+ children: [
435
+ registration,
436
+ /* @__PURE__ */ jsx(ObserveMetadata, {
437
+ composition: compositions.find(({ id }) => id === compositionId) ?? null,
438
+ compositionId,
439
+ inputProps,
440
+ revision,
441
+ registeredRevision,
442
+ onChange,
443
+ onError
444
+ })
445
+ ]
446
+ })
447
+ });
448
+ };
449
+ var createBrowserCompositionObserver = ({
450
+ onChange,
451
+ onError
452
+ }) => {
453
+ if (typeof document === "undefined" || !document.body) {
454
+ throw new Error("Composition observation requires a browser document.");
455
+ }
456
+ const container = document.createElement("div");
457
+ container.hidden = true;
458
+ document.body.appendChild(container);
459
+ let disposed = false;
460
+ let revision = 0;
461
+ let lastError = null;
462
+ const reportError = (error, errorRevision) => {
463
+ if (!disposed && errorRevision === revision) {
464
+ if (lastError !== null && lastError.error === error && lastError.revision === errorRevision) {
465
+ return;
466
+ }
467
+ lastError = { error, revision: errorRevision };
468
+ onError(error instanceof Error ? error : new Error(String(error)));
469
+ }
470
+ };
471
+ const onComposition = (composition, resolvedRevision) => {
472
+ if (disposed || resolvedRevision !== revision) {
473
+ return;
474
+ }
475
+ try {
476
+ onChange(composition);
477
+ } catch (error) {
478
+ reportError(error, resolvedRevision);
479
+ }
480
+ };
481
+ const root = createRoot(container, {
482
+ onCaughtError: (error) => reportError(error, revision),
483
+ onUncaughtError: (error) => reportError(error, revision)
484
+ });
485
+ return {
486
+ update: (selection) => {
487
+ if (disposed) {
488
+ throw new Error("The composition observer was disposed.");
489
+ }
490
+ revision++;
491
+ root.render(/* @__PURE__ */ jsx(RegistrationErrorBoundary, {
492
+ revision,
493
+ onError: reportError,
494
+ children: /* @__PURE__ */ jsx(ObserveComposition, {
495
+ ...selection,
496
+ revision,
497
+ onChange: onComposition,
498
+ onError: reportError
499
+ })
500
+ }));
501
+ },
502
+ dispose: () => {
503
+ if (disposed) {
504
+ return;
505
+ }
506
+ disposed = true;
507
+ try {
508
+ root.unmount();
509
+ } finally {
510
+ container.remove();
511
+ }
512
+ }
513
+ };
514
+ };
515
+ // src/get-browser-composition.tsx
516
+ import React3, { Suspense as Suspense2, useEffect as useEffect2 } from "react";
517
+ import { createRoot as createRoot2 } from "react-dom/client";
518
+ import { Internals as Internals3 } from "remotion";
519
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
520
+
521
+ class RegistrationErrorBoundary2 extends React3.Component {
522
+ state = { failed: false };
523
+ static getDerivedStateFromError() {
524
+ return { failed: true };
525
+ }
526
+ componentDidCatch(error) {
527
+ this.props.onError(error);
528
+ }
529
+ render() {
530
+ return this.state.failed ? null : this.props.children;
531
+ }
532
+ }
533
+ var RegistrationComplete = ({ onComplete }) => {
534
+ useEffect2(onComplete, [onComplete]);
535
+ return null;
536
+ };
537
+ var getBrowserComposition = async ({
538
+ root: RegisteredRoot,
539
+ compositionId,
540
+ inputProps,
541
+ signal
542
+ }) => {
543
+ if (signal?.aborted) {
544
+ throw signal.reason;
545
+ }
546
+ if (typeof document === "undefined" || !document.body) {
547
+ throw new Error("getBrowserComposition() must be called in a browser.");
548
+ }
549
+ const container = document.createElement("div");
550
+ container.hidden = true;
551
+ document.body.appendChild(container);
552
+ const controller = new AbortController;
553
+ const abort = () => controller.abort(signal?.reason);
554
+ signal?.addEventListener("abort", abort, { once: true });
555
+ const compositions = new Map;
556
+ let reactRoot = null;
557
+ let finished = false;
558
+ let resolving = false;
559
+ try {
560
+ return await new Promise((resolve, reject) => {
561
+ const onError = (error) => {
562
+ if (finished) {
563
+ return;
564
+ }
565
+ finished = true;
566
+ reject(error instanceof Error ? error : new Error(String(error)));
567
+ };
568
+ controller.signal.addEventListener("abort", () => {
569
+ if (finished) {
570
+ return;
571
+ }
572
+ finished = true;
573
+ reject(controller.signal.reason);
574
+ }, { once: true });
575
+ const onComplete = () => {
576
+ queueMicrotask(() => {
577
+ if (finished || resolving) {
578
+ return;
579
+ }
580
+ resolving = true;
581
+ try {
582
+ const composition = compositions.get(compositionId);
583
+ if (!composition) {
584
+ throw new Error(`No composition with ID "${compositionId}" was registered. Available IDs: ${[...compositions.keys()].join(", ") || "(none)"}.`);
585
+ }
586
+ const defaultProps = composition.defaultProps ?? {};
587
+ const config = Internals3.resolveVideoConfig({
588
+ compositionId,
589
+ compositionWidth: composition.width ?? null,
590
+ compositionHeight: composition.height ?? null,
591
+ compositionFps: composition.fps ?? null,
592
+ compositionDurationInFrames: composition.durationInFrames ?? null,
593
+ calculateMetadata: composition.calculateMetadata,
594
+ defaultProps,
595
+ inputProps: { ...defaultProps, ...inputProps },
596
+ signal: controller.signal
597
+ });
598
+ Promise.resolve(config).then((videoConfig) => {
599
+ if (finished) {
600
+ return;
601
+ }
602
+ finished = true;
603
+ resolve({ ...videoConfig, component: composition.component });
604
+ }, onError);
605
+ } catch (error) {
606
+ onError(error);
607
+ }
608
+ });
609
+ };
610
+ const setters = {
611
+ registerComposition: (composition) => {
612
+ if (compositions.has(composition.id)) {
613
+ throw new Error(`A composition with ID "${composition.id}" was registered more than once.`);
614
+ }
615
+ compositions.set(composition.id, composition);
616
+ },
617
+ unregisterComposition: (id) => {
618
+ compositions.delete(id);
619
+ },
620
+ registerFolder: () => {
621
+ return;
622
+ },
623
+ unregisterFolder: () => {
624
+ return;
625
+ },
626
+ setCanvasContent: () => {
627
+ return;
628
+ },
629
+ setCurrentAssetMetadata: () => {
630
+ return;
631
+ },
632
+ onlyRenderComposition: null
633
+ };
634
+ reactRoot = createRoot2(container, {
635
+ onCaughtError: onError,
636
+ onUncaughtError: onError
637
+ });
638
+ reactRoot.render(/* @__PURE__ */ jsx2(RegistrationErrorBoundary2, {
639
+ onError,
640
+ children: /* @__PURE__ */ jsx2(Internals3.RemotionEnvironmentContext.Provider, {
641
+ value: {
642
+ isClientSideRendering: false,
643
+ isPlayer: false,
644
+ isReadOnlyStudio: false,
645
+ isRendering: false,
646
+ isStudio: false
647
+ },
648
+ children: /* @__PURE__ */ jsx2(Internals3.CompositionSetters.Provider, {
649
+ value: setters,
650
+ children: /* @__PURE__ */ jsxs2(Suspense2, {
651
+ fallback: null,
652
+ children: [
653
+ /* @__PURE__ */ jsx2(RegisteredRoot, {}),
654
+ /* @__PURE__ */ jsx2(RegistrationComplete, {
655
+ onComplete
656
+ })
657
+ ]
658
+ })
659
+ })
660
+ })
661
+ }));
662
+ });
663
+ } finally {
664
+ finished = true;
665
+ signal?.removeEventListener("abort", abort);
666
+ controller.abort();
667
+ try {
668
+ reactRoot?.unmount();
669
+ } finally {
670
+ compositions.clear();
671
+ container.remove();
672
+ }
673
+ }
674
+ };
675
+ // src/load-browser-bundle.ts
676
+ var loadBrowserBundle = ({ bundle }) => {
677
+ if (bundle.fastRefresh) {
678
+ throw new Error("Use createBrowserBundleRuntime() to load a Fast Refresh bundle.");
679
+ }
680
+ const scope = createBrowserModuleScope(null);
681
+ scope.evaluate(bundle.code);
682
+ return scope.getRoot();
683
+ };
684
+ export {
685
+ loadBrowserBundle,
686
+ getBrowserComposition,
687
+ createBrowserCompositionObserver,
688
+ createBrowserBundleRuntime
689
+ };