remotion 3.2.22 → 3.2.23

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.
Files changed (97) hide show
  1. package/.turbo/turbo-build.log +5 -5
  2. package/dist/Img.js +7 -5
  3. package/dist/RemotionRoot.js +5 -4
  4. package/dist/audio/AudioForDevelopment.js +12 -9
  5. package/dist/audio/AudioForRendering.js +1 -1
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.js +3 -1
  8. package/dist/internals.d.ts +3 -0
  9. package/dist/internals.js +2 -0
  10. package/dist/prefetch-state.d.ts +13 -0
  11. package/dist/prefetch-state.js +26 -0
  12. package/dist/prefetch.d.ts +2 -2
  13. package/dist/prefetch.js +8 -8
  14. package/dist/preload.d.ts +7 -0
  15. package/dist/preload.js +86 -0
  16. package/dist/version.d.ts +1 -1
  17. package/dist/version.js +1 -1
  18. package/dist/video/VideoForDevelopment.js +9 -7
  19. package/dist/video/VideoForRendering.js +1 -1
  20. package/ensure-correct-version.js +1 -1
  21. package/package.json +2 -2
  22. package/.turbo/turbo-lint.log +0 -11
  23. package/.turbo/turbo-test.log +0 -405
  24. package/dist/compress-assets.d.ts +0 -7
  25. package/dist/compress-assets.js +0 -25
  26. package/dist/config/browser-executable.d.ts +0 -3
  27. package/dist/config/browser-executable.js +0 -12
  28. package/dist/config/browser.d.ts +0 -4
  29. package/dist/config/browser.js +0 -19
  30. package/dist/config/chromium-flags.d.ts +0 -10
  31. package/dist/config/chromium-flags.js +0 -34
  32. package/dist/config/codec.d.ts +0 -16
  33. package/dist/config/codec.js +0 -109
  34. package/dist/config/concurrency.d.ts +0 -3
  35. package/dist/config/concurrency.js +0 -12
  36. package/dist/config/crf.d.ts +0 -9
  37. package/dist/config/crf.js +0 -83
  38. package/dist/config/env-file.d.ts +0 -2
  39. package/dist/config/env-file.js +0 -10
  40. package/dist/config/every-nth-frame.d.ts +0 -3
  41. package/dist/config/every-nth-frame.js +0 -20
  42. package/dist/config/ffmpeg-executable.d.ts +0 -5
  43. package/dist/config/ffmpeg-executable.js +0 -21
  44. package/dist/config/frame-range.d.ts +0 -5
  45. package/dist/config/frame-range.js +0 -80
  46. package/dist/config/image-format.d.ts +0 -8
  47. package/dist/config/image-format.js +0 -37
  48. package/dist/config/image-sequence.d.ts +0 -3
  49. package/dist/config/image-sequence.js +0 -15
  50. package/dist/config/index.d.ts +0 -178
  51. package/dist/config/index.js +0 -193
  52. package/dist/config/log.d.ts +0 -7
  53. package/dist/config/log.js +0 -25
  54. package/dist/config/max-timeline-tracks.d.ts +0 -2
  55. package/dist/config/max-timeline-tracks.js +0 -24
  56. package/dist/config/number-of-gif-loops.d.ts +0 -4
  57. package/dist/config/number-of-gif-loops.js +0 -21
  58. package/dist/config/override-webpack.d.ts +0 -6
  59. package/dist/config/override-webpack.js +0 -14
  60. package/dist/config/overwrite.d.ts +0 -3
  61. package/dist/config/overwrite.js +0 -14
  62. package/dist/config/pixel-format.d.ts +0 -8
  63. package/dist/config/pixel-format.js +0 -38
  64. package/dist/config/preview-server.d.ts +0 -2
  65. package/dist/config/preview-server.js +0 -20
  66. package/dist/config/prores-profile.d.ts +0 -7
  67. package/dist/config/prores-profile.js +0 -32
  68. package/dist/config/quality.d.ts +0 -2
  69. package/dist/config/quality.js +0 -17
  70. package/dist/config/scale.d.ts +0 -3
  71. package/dist/config/scale.js +0 -15
  72. package/dist/config/still-frame.d.ts +0 -2
  73. package/dist/config/still-frame.js +0 -12
  74. package/dist/config/timeout.d.ts +0 -2
  75. package/dist/config/timeout.js +0 -17
  76. package/dist/config/webpack-caching.d.ts +0 -3
  77. package/dist/config/webpack-caching.js +0 -16
  78. package/dist/feature-flags.d.ts +0 -1
  79. package/dist/feature-flags.js +0 -7
  80. package/dist/is-audio-codec.d.ts +0 -2
  81. package/dist/is-audio-codec.js +0 -7
  82. package/dist/perf/index.d.ts +0 -5
  83. package/dist/perf/index.js +0 -35
  84. package/dist/timeline-inout-position-state.d.ts +0 -12
  85. package/dist/timeline-inout-position-state.js +0 -23
  86. package/dist/timeout.d.ts +0 -2
  87. package/dist/timeout.js +0 -12
  88. package/dist/validation/validate-every-nth-frame.d.ts +0 -1
  89. package/dist/validation/validate-every-nth-frame.js +0 -21
  90. package/dist/validation/validate-frame.d.ts +0 -1
  91. package/dist/validation/validate-frame.js +0 -24
  92. package/dist/validation/validate-image-format.d.ts +0 -2
  93. package/dist/validation/validate-image-format.js +0 -9
  94. package/dist/validation/validate-opengl-renderer.d.ts +0 -4
  95. package/dist/validation/validate-opengl-renderer.js +0 -14
  96. package/dist/validation/validate-quality.d.ts +0 -1
  97. package/dist/validation/validate-quality.js +0 -21
@@ -1,5 +1,5 @@
1
- remotion:build: cache hit, replaying output 9c88e751e5828f60
2
- remotion:build: 
3
- remotion:build: > remotion@3.2.21 build /Users/jonathanburger/remotion/packages/core
4
- remotion:build: > tsc -d
5
- remotion:build: 
1
+ remotion:build: cache hit, replaying output 5f33f3b98314bbe2
2
+ remotion:build: 
3
+ remotion:build: > remotion@3.2.22 build /Users/jonathanburger/remotion/packages/core
4
+ remotion:build: > tsc -d
5
+ remotion:build: 
package/dist/Img.js CHANGED
@@ -5,11 +5,13 @@ const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const delay_render_1 = require("./delay-render");
7
7
  const get_environment_1 = require("./get-environment");
8
- const ImgRefForwarding = ({ onError, ...props }, ref) => {
8
+ const prefetch_1 = require("./prefetch");
9
+ const ImgRefForwarding = ({ onError, src, ...props }, ref) => {
9
10
  const imageRef = (0, react_1.useRef)(null);
10
11
  (0, react_1.useImperativeHandle)(ref, () => {
11
12
  return imageRef.current;
12
- });
13
+ }, []);
14
+ const actualSrc = (0, prefetch_1.usePreload)(src);
13
15
  const didGetError = (0, react_1.useCallback)((e) => {
14
16
  var _a;
15
17
  if (onError) {
@@ -26,7 +28,7 @@ const ImgRefForwarding = ({ onError, ...props }, ref) => {
26
28
  if (process.env.NODE_ENV === 'test') {
27
29
  return;
28
30
  }
29
- const newHandle = (0, delay_render_1.delayRender)('Loading <Img> with src=' + props.src);
31
+ const newHandle = (0, delay_render_1.delayRender)('Loading <Img> with src=' + src);
30
32
  const { current } = imageRef;
31
33
  const didLoad = () => {
32
34
  (0, delay_render_1.continueRender)(newHandle);
@@ -42,8 +44,8 @@ const ImgRefForwarding = ({ onError, ...props }, ref) => {
42
44
  current === null || current === void 0 ? void 0 : current.removeEventListener('load', didLoad);
43
45
  (0, delay_render_1.continueRender)(newHandle);
44
46
  };
45
- }, [props.src]);
47
+ }, [src]);
46
48
  }
47
- return (0, jsx_runtime_1.jsx)("img", { ...props, ref: imageRef, onError: didGetError });
49
+ return ((0, jsx_runtime_1.jsx)("img", { ...props, ref: imageRef, src: actualSrc, onError: didGetError }));
48
50
  };
49
51
  exports.Img = (0, react_1.forwardRef)(ImgRefForwarding);
@@ -7,6 +7,7 @@ const shared_audio_tags_1 = require("./audio/shared-audio-tags");
7
7
  const CompositionManager_1 = require("./CompositionManager");
8
8
  const delay_render_1 = require("./delay-render");
9
9
  const nonce_1 = require("./nonce");
10
+ const prefetch_state_1 = require("./prefetch-state");
10
11
  const random_1 = require("./random");
11
12
  const timeline_position_state_1 = require("./timeline-position-state");
12
13
  const RemotionRoot = ({ children }) => {
@@ -61,10 +62,10 @@ const RemotionRoot = ({ children }) => {
61
62
  });
62
63
  }
63
64
  }, []);
64
- return ((0, jsx_runtime_1.jsx)(nonce_1.NonceContext.Provider, { value: nonceContext, children: (0, jsx_runtime_1.jsx)(timeline_position_state_1.TimelineContext.Provider, { value: timelineContextValue, children: (0, jsx_runtime_1.jsx)(timeline_position_state_1.SetTimelineContext.Provider, { value: setTimelineContextValue, children: (0, jsx_runtime_1.jsx)(CompositionManager_1.CompositionManagerProvider, { children: (0, jsx_runtime_1.jsx)(shared_audio_tags_1.SharedAudioContextProvider
65
- // In the preview, which is mostly played on Desktop, we opt out of the autoplay policy fix as described in https://github.com/remotion-dev/remotion/pull/554, as it mostly applies to mobile.
66
- , {
65
+ return ((0, jsx_runtime_1.jsx)(nonce_1.NonceContext.Provider, { value: nonceContext, children: (0, jsx_runtime_1.jsx)(timeline_position_state_1.TimelineContext.Provider, { value: timelineContextValue, children: (0, jsx_runtime_1.jsx)(timeline_position_state_1.SetTimelineContext.Provider, { value: setTimelineContextValue, children: (0, jsx_runtime_1.jsx)(prefetch_state_1.PrefetchProvider, { children: (0, jsx_runtime_1.jsx)(CompositionManager_1.CompositionManagerProvider, { children: (0, jsx_runtime_1.jsx)(shared_audio_tags_1.SharedAudioContextProvider
67
66
  // In the preview, which is mostly played on Desktop, we opt out of the autoplay policy fix as described in https://github.com/remotion-dev/remotion/pull/554, as it mostly applies to mobile.
68
- numberOfAudioTags: 0, children: children }) }) }) }) }));
67
+ , {
68
+ // In the preview, which is mostly played on Desktop, we opt out of the autoplay policy fix as described in https://github.com/remotion-dev/remotion/pull/554, as it mostly applies to mobile.
69
+ numberOfAudioTags: 0, children: children }) }) }) }) }) }));
69
70
  };
70
71
  exports.RemotionRoot = RemotionRoot;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AudioForDevelopment = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
+ const prefetch_1 = require("../prefetch");
6
7
  const random_1 = require("../random");
7
8
  const Sequence_1 = require("../Sequence");
8
9
  const use_media_in_timeline_1 = require("../use-media-in-timeline");
@@ -20,20 +21,22 @@ const AudioForDevelopmentForwardRefFunction = (props, ref) => {
20
21
  const [mediaVolume] = (0, volume_position_state_1.useMediaVolumeState)();
21
22
  const [mediaMuted] = (0, volume_position_state_1.useMediaMutedState)();
22
23
  const volumePropFrame = (0, use_audio_frame_1.useFrameForVolumeProp)();
23
- const { volume, muted, playbackRate, shouldPreMountAudioTags, ...nativeProps } = props;
24
+ const { volume, muted, playbackRate, shouldPreMountAudioTags, src, ...nativeProps } = props;
25
+ if (!src) {
26
+ throw new TypeError("No 'src' was passed to <Audio>.");
27
+ }
28
+ const preloadedSrc = (0, prefetch_1.usePreload)(src);
24
29
  const propsToPass = (0, react_1.useMemo)(() => {
25
30
  return {
26
31
  muted: muted || mediaMuted,
32
+ src: preloadedSrc,
27
33
  ...nativeProps,
28
34
  };
29
- }, [mediaMuted, muted, nativeProps]);
35
+ }, [mediaMuted, muted, nativeProps, preloadedSrc]);
30
36
  const sequenceContext = (0, react_1.useContext)(Sequence_1.SequenceContext);
31
37
  // Generate a string that's as unique as possible for this asset
32
38
  // but at the same time deterministic. We use it to combat strict mode issues.
33
- const id = (0, react_1.useMemo)(() => {
34
- var _a;
35
- return `audio-${(0, random_1.random)((_a = props.src) !== null && _a !== void 0 ? _a : '')}-${sequenceContext === null || sequenceContext === void 0 ? void 0 : sequenceContext.relativeFrom}-${sequenceContext === null || sequenceContext === void 0 ? void 0 : sequenceContext.cumulatedFrom}-${sequenceContext === null || sequenceContext === void 0 ? void 0 : sequenceContext.durationInFrames}-muted:${props.muted}`;
36
- }, [props.muted, props.src, sequenceContext]);
39
+ const id = (0, react_1.useMemo)(() => `audio-${(0, random_1.random)(src !== null && src !== void 0 ? src : '')}-${sequenceContext === null || sequenceContext === void 0 ? void 0 : sequenceContext.relativeFrom}-${sequenceContext === null || sequenceContext === void 0 ? void 0 : sequenceContext.cumulatedFrom}-${sequenceContext === null || sequenceContext === void 0 ? void 0 : sequenceContext.durationInFrames}-muted:${props.muted}`, [props.muted, src, sequenceContext]);
37
40
  const audioRef = (0, shared_audio_tags_1.useSharedAudio)(propsToPass, id).el;
38
41
  const actualVolume = (0, use_media_tag_volume_1.useMediaTagVolume)(audioRef);
39
42
  (0, use_sync_volume_with_media_tag_1.useSyncVolumeWithMediaTag)({
@@ -47,19 +50,19 @@ const AudioForDevelopmentForwardRefFunction = (props, ref) => {
47
50
  volume,
48
51
  mediaVolume,
49
52
  mediaRef: audioRef,
50
- src: nativeProps.src,
53
+ src,
51
54
  mediaType: 'audio',
52
55
  });
53
56
  (0, use_media_playback_1.useMediaPlayback)({
54
57
  mediaRef: audioRef,
55
- src: nativeProps.src,
58
+ src,
56
59
  mediaType: 'audio',
57
60
  playbackRate: playbackRate !== null && playbackRate !== void 0 ? playbackRate : 1,
58
61
  onlyWarnForMediaSeekingError: false,
59
62
  });
60
63
  (0, react_1.useImperativeHandle)(ref, () => {
61
64
  return audioRef.current;
62
- });
65
+ }, [audioRef]);
63
66
  if (initialShouldPreMountAudioElements) {
64
67
  return null;
65
68
  }
@@ -32,7 +32,7 @@ const AudioForRenderingRefForwardingFunction = (props, ref) => {
32
32
  });
33
33
  (0, react_1.useImperativeHandle)(ref, () => {
34
34
  return audioRef.current;
35
- });
35
+ }, []);
36
36
  (0, react_1.useEffect)(() => {
37
37
  var _a;
38
38
  if (!props.src) {
package/dist/index.d.ts CHANGED
@@ -56,6 +56,7 @@ export * from './internals';
56
56
  export * from './interpolate';
57
57
  export { interpolateColors } from './interpolate-colors';
58
58
  export { Loop } from './loop';
59
+ export { prefetch } from './prefetch';
59
60
  export * from './random';
60
61
  export { registerRoot } from './register-root';
61
62
  export { Sequence } from './Sequence';
package/dist/index.js CHANGED
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.useCurrentFrame = exports.staticFile = exports.Series = exports.Sequence = exports.registerRoot = exports.Loop = exports.interpolateColors = exports.getInputProps = exports.Config = void 0;
17
+ exports.useCurrentFrame = exports.staticFile = exports.Series = exports.Sequence = exports.registerRoot = exports.prefetch = exports.Loop = exports.interpolateColors = exports.getInputProps = exports.Config = void 0;
18
18
  require("./asset-types");
19
19
  const multiple_versions_warning_1 = require("./multiple-versions-warning");
20
20
  (0, multiple_versions_warning_1.checkMultipleRemotionVersions)();
@@ -37,6 +37,8 @@ var interpolate_colors_1 = require("./interpolate-colors");
37
37
  Object.defineProperty(exports, "interpolateColors", { enumerable: true, get: function () { return interpolate_colors_1.interpolateColors; } });
38
38
  var loop_1 = require("./loop");
39
39
  Object.defineProperty(exports, "Loop", { enumerable: true, get: function () { return loop_1.Loop; } });
40
+ var prefetch_1 = require("./prefetch");
41
+ Object.defineProperty(exports, "prefetch", { enumerable: true, get: function () { return prefetch_1.prefetch; } });
40
42
  __exportStar(require("./random"), exports);
41
43
  var register_root_1 = require("./register-root");
42
44
  Object.defineProperty(exports, "registerRoot", { enumerable: true, get: function () { return register_root_1.registerRoot; } });
@@ -79,6 +79,9 @@ export declare const Internals: {
79
79
  }>;
80
80
  CanUseRemotionHooks: import("react").Context<boolean>;
81
81
  enableLegacyRemotionConfig: () => void;
82
+ PrefetchProvider: import("react").FC<{
83
+ children: import("react").ReactNode;
84
+ }>;
82
85
  };
83
86
  declare type WebpackConfiguration = Configuration;
84
87
  declare type WebpackOverrideFn = (currentConfiguration: WebpackConfiguration) => WebpackConfiguration;
package/dist/internals.js CHANGED
@@ -33,6 +33,7 @@ const delay_render_1 = require("./delay-render");
33
33
  const get_environment_1 = require("./get-environment");
34
34
  const get_preview_dom_element_1 = require("./get-preview-dom-element");
35
35
  const portal_node_1 = require("./portal-node");
36
+ const prefetch_state_1 = require("./prefetch-state");
36
37
  const register_root_1 = require("./register-root");
37
38
  const RemotionRoot_1 = require("./RemotionRoot");
38
39
  const Sequence_1 = require("./Sequence");
@@ -88,4 +89,5 @@ exports.Internals = {
88
89
  CanUseRemotionHooksProvider: CanUseRemotionHooks_1.CanUseRemotionHooksProvider,
89
90
  CanUseRemotionHooks: CanUseRemotionHooks_1.CanUseRemotionHooks,
90
91
  enableLegacyRemotionConfig: config_1.enableLegacyRemotionConfig,
92
+ PrefetchProvider: prefetch_state_1.PrefetchProvider,
91
93
  };
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ declare type Value = {
3
+ preloads: Record<string, string>;
4
+ setPreloads: React.Dispatch<React.SetStateAction<Record<string, string>>>;
5
+ };
6
+ export declare const preloadRef: React.RefObject<{
7
+ setPreloads: React.Dispatch<React.SetStateAction<Record<string, string>>>;
8
+ }>;
9
+ export declare const PreloadContext: React.Context<Value>;
10
+ export declare const PrefetchProvider: React.FC<{
11
+ children: React.ReactNode;
12
+ }>;
13
+ export {};
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PrefetchProvider = exports.PreloadContext = exports.preloadRef = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ exports.preloadRef = (0, react_1.createRef)();
7
+ exports.PreloadContext = (0, react_1.createContext)({
8
+ preloads: {},
9
+ setPreloads: () => undefined,
10
+ });
11
+ const PrefetchProvider = ({ children }) => {
12
+ const [preloads, setPreloads] = (0, react_1.useState)({});
13
+ const value = (0, react_1.useMemo)(() => {
14
+ return {
15
+ preloads,
16
+ setPreloads,
17
+ };
18
+ }, [preloads]);
19
+ (0, react_1.useImperativeHandle)(exports.preloadRef, () => {
20
+ return {
21
+ setPreloads,
22
+ };
23
+ }, []);
24
+ return ((0, jsx_runtime_1.jsx)(exports.PreloadContext.Provider, { value: value, children: children }));
25
+ };
26
+ exports.PrefetchProvider = PrefetchProvider;
@@ -1,7 +1,7 @@
1
1
  export declare const usePreload: (src: string) => string;
2
2
  declare type FetchAndPreload = {
3
- unpreload: () => void;
4
- waitForDone: () => Promise<string>;
3
+ free: () => void;
4
+ waitUntilDone: () => Promise<string>;
5
5
  };
6
6
  export declare const prefetch: (src: string) => FetchAndPreload;
7
7
  export {};
package/dist/prefetch.js CHANGED
@@ -3,18 +3,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.prefetch = exports.usePreload = void 0;
4
4
  const react_1 = require("react");
5
5
  const get_environment_1 = require("./get-environment");
6
- const preload_state_1 = require("./preload-state");
6
+ const prefetch_state_1 = require("./prefetch-state");
7
7
  const usePreload = (src) => {
8
8
  var _a;
9
- const { preloads } = (0, react_1.useContext)(preload_state_1.PreloadContext);
9
+ const { preloads } = (0, react_1.useContext)(prefetch_state_1.PreloadContext);
10
10
  return (_a = preloads[src]) !== null && _a !== void 0 ? _a : src;
11
11
  };
12
12
  exports.usePreload = usePreload;
13
13
  const prefetch = (src) => {
14
14
  if ((0, get_environment_1.getRemotionEnvironment)() === 'rendering') {
15
15
  return {
16
- unpreload: () => undefined,
17
- waitForDone: () => Promise.resolve(src),
16
+ free: () => undefined,
17
+ waitUntilDone: () => Promise.resolve(src),
18
18
  };
19
19
  }
20
20
  let canceled = false;
@@ -47,7 +47,7 @@ const prefetch = (src) => {
47
47
  }
48
48
  if (buf) {
49
49
  objectUrl = URL.createObjectURL(buf);
50
- (_a = preload_state_1.preloadRef.current) === null || _a === void 0 ? void 0 : _a.setPreloads((p) => ({
50
+ (_a = prefetch_state_1.preloadRef.current) === null || _a === void 0 ? void 0 : _a.setPreloads((p) => ({
51
51
  ...p,
52
52
  [src]: objectUrl,
53
53
  }));
@@ -58,11 +58,11 @@ const prefetch = (src) => {
58
58
  reject(err);
59
59
  });
60
60
  return {
61
- unpreload: () => {
61
+ free: () => {
62
62
  var _a;
63
63
  if (objectUrl) {
64
64
  URL.revokeObjectURL(objectUrl);
65
- (_a = preload_state_1.preloadRef.current) === null || _a === void 0 ? void 0 : _a.setPreloads((p) => {
65
+ (_a = prefetch_state_1.preloadRef.current) === null || _a === void 0 ? void 0 : _a.setPreloads((p) => {
66
66
  const copy = { ...p };
67
67
  delete copy[src];
68
68
  return copy;
@@ -78,7 +78,7 @@ const prefetch = (src) => {
78
78
  }
79
79
  }
80
80
  },
81
- waitForDone: () => {
81
+ waitUntilDone: () => {
82
82
  return waitUntilDone;
83
83
  },
84
84
  };
@@ -0,0 +1,7 @@
1
+ export declare const usePreload: (src: string) => string;
2
+ declare type FetchAndPreload = {
3
+ unpreload: () => void;
4
+ waitForDone: () => Promise<string>;
5
+ };
6
+ export declare const fetchAndPreload: (src: string) => FetchAndPreload;
7
+ export {};
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchAndPreload = exports.usePreload = void 0;
4
+ const react_1 = require("react");
5
+ const get_environment_1 = require("./get-environment");
6
+ const preload_state_1 = require("./preload-state");
7
+ const usePreload = (src) => {
8
+ var _a;
9
+ const { preloads } = (0, react_1.useContext)(preload_state_1.PreloadContext);
10
+ return (_a = preloads[src]) !== null && _a !== void 0 ? _a : src;
11
+ };
12
+ exports.usePreload = usePreload;
13
+ const fetchAndPreload = (src) => {
14
+ if ((0, get_environment_1.getRemotionEnvironment)() === 'rendering') {
15
+ return {
16
+ unpreload: () => undefined,
17
+ waitForDone: () => Promise.resolve(src),
18
+ };
19
+ }
20
+ let canceled = false;
21
+ let objectUrl = null;
22
+ let resolve = () => undefined;
23
+ let reject = () => undefined;
24
+ const waitUntilDone = new Promise((res, rej) => {
25
+ resolve = res;
26
+ reject = rej;
27
+ });
28
+ const controller = new AbortController();
29
+ let canBeAborted = true;
30
+ fetch(src, {
31
+ signal: controller.signal,
32
+ })
33
+ .then((res) => {
34
+ canBeAborted = false;
35
+ if (canceled) {
36
+ return null;
37
+ }
38
+ if (!res.ok) {
39
+ throw new Error(`HTTP error, status = ${res.status}`);
40
+ }
41
+ return res.blob();
42
+ })
43
+ .then((buf) => {
44
+ var _a;
45
+ if (canceled) {
46
+ return;
47
+ }
48
+ if (buf) {
49
+ objectUrl = URL.createObjectURL(buf);
50
+ (_a = preload_state_1.preloadRef.current) === null || _a === void 0 ? void 0 : _a.setPreloads((p) => ({
51
+ ...p,
52
+ [src]: objectUrl,
53
+ }));
54
+ resolve(objectUrl);
55
+ }
56
+ })
57
+ .catch((err) => {
58
+ reject(err);
59
+ });
60
+ return {
61
+ unpreload: () => {
62
+ var _a;
63
+ if (objectUrl) {
64
+ URL.revokeObjectURL(objectUrl);
65
+ (_a = preload_state_1.preloadRef.current) === null || _a === void 0 ? void 0 : _a.setPreloads((p) => {
66
+ const copy = { ...p };
67
+ delete copy[src];
68
+ return copy;
69
+ });
70
+ }
71
+ else {
72
+ canceled = true;
73
+ if (canBeAborted) {
74
+ try {
75
+ controller.abort();
76
+ }
77
+ catch (e) { }
78
+ }
79
+ }
80
+ },
81
+ waitForDone: () => {
82
+ return waitUntilDone;
83
+ },
84
+ };
85
+ };
86
+ exports.fetchAndPreload = fetchAndPreload;
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const VERSION = "3.2.22";
1
+ export declare const VERSION = "3.2.23";
package/dist/version.js CHANGED
@@ -2,4 +2,4 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
4
  // Automatically generated on publish
5
- exports.VERSION = '3.2.22';
5
+ exports.VERSION = '3.2.23';
@@ -4,6 +4,7 @@ exports.VideoForDevelopment = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const use_audio_frame_1 = require("../audio/use-audio-frame");
7
+ const prefetch_1 = require("../prefetch");
7
8
  const use_media_in_timeline_1 = require("../use-media-in-timeline");
8
9
  const use_media_playback_1 = require("../use-media-playback");
9
10
  const use_media_tag_volume_1 = require("../use-media-tag-volume");
@@ -13,7 +14,7 @@ const VideoForDevelopmentRefForwardingFunction = (props, ref) => {
13
14
  var _a;
14
15
  const videoRef = (0, react_1.useRef)(null);
15
16
  const volumePropFrame = (0, use_audio_frame_1.useFrameForVolumeProp)();
16
- const { volume, muted, playbackRate, onlyWarnForMediaSeekingError, ...nativeProps } = props;
17
+ const { volume, muted, playbackRate, onlyWarnForMediaSeekingError, src, ...nativeProps } = props;
17
18
  const actualVolume = (0, use_media_tag_volume_1.useMediaTagVolume)(videoRef);
18
19
  const [mediaVolume] = (0, volume_position_state_1.useMediaVolumeState)();
19
20
  const [mediaMuted] = (0, volume_position_state_1.useMediaMutedState)();
@@ -22,7 +23,7 @@ const VideoForDevelopmentRefForwardingFunction = (props, ref) => {
22
23
  volume,
23
24
  mediaVolume,
24
25
  mediaType: 'video',
25
- src: nativeProps.src,
26
+ src,
26
27
  });
27
28
  (0, use_sync_volume_with_media_tag_1.useSyncVolumeWithMediaTag)({
28
29
  volumePropFrame,
@@ -33,14 +34,15 @@ const VideoForDevelopmentRefForwardingFunction = (props, ref) => {
33
34
  });
34
35
  (0, use_media_playback_1.useMediaPlayback)({
35
36
  mediaRef: videoRef,
36
- src: nativeProps.src,
37
+ src,
37
38
  mediaType: 'video',
38
39
  playbackRate: (_a = props.playbackRate) !== null && _a !== void 0 ? _a : 1,
39
40
  onlyWarnForMediaSeekingError,
40
41
  });
42
+ const actualSrc = (0, prefetch_1.usePreload)(src);
41
43
  (0, react_1.useImperativeHandle)(ref, () => {
42
44
  return videoRef.current;
43
- });
45
+ }, []);
44
46
  (0, react_1.useEffect)(() => {
45
47
  const { current } = videoRef;
46
48
  if (!current) {
@@ -50,7 +52,7 @@ const VideoForDevelopmentRefForwardingFunction = (props, ref) => {
50
52
  var _a;
51
53
  if (current === null || current === void 0 ? void 0 : current.error) {
52
54
  console.error('Error occurred in video', current === null || current === void 0 ? void 0 : current.error);
53
- throw new Error(`The browser threw an error while playing the video ${nativeProps.src}: Code ${current.error.code} - ${(_a = current === null || current === void 0 ? void 0 : current.error) === null || _a === void 0 ? void 0 : _a.message}. See https://remotion.dev/docs/media-playback-error for help`);
55
+ throw new Error(`The browser threw an error while playing the video ${src}: Code ${current.error.code} - ${(_a = current === null || current === void 0 ? void 0 : current.error) === null || _a === void 0 ? void 0 : _a.message}. See https://remotion.dev/docs/media-playback-error for help`);
54
56
  }
55
57
  else {
56
58
  throw new Error('The browser threw an error');
@@ -60,8 +62,8 @@ const VideoForDevelopmentRefForwardingFunction = (props, ref) => {
60
62
  return () => {
61
63
  current.removeEventListener('error', errorHandler);
62
64
  };
63
- }, [nativeProps.src]);
64
- return ((0, jsx_runtime_1.jsx)("video", { ref: videoRef, muted: muted || mediaMuted, playsInline: true, ...nativeProps }));
65
+ }, [src]);
66
+ return ((0, jsx_runtime_1.jsx)("video", { ref: videoRef, muted: muted || mediaMuted, playsInline: true, src: actualSrc, ...nativeProps }));
65
67
  };
66
68
  // Copy types from forwardRef but not necessary to remove ref
67
69
  exports.VideoForDevelopment = (0, react_1.forwardRef)(VideoForDevelopmentRefForwardingFunction);
@@ -80,7 +80,7 @@ const VideoForRenderingForwardFunction = ({ onError, volume: volumeProp, playbac
80
80
  ]);
81
81
  (0, react_1.useImperativeHandle)(ref, () => {
82
82
  return videoRef.current;
83
- });
83
+ }, []);
84
84
  (0, react_1.useEffect)(() => {
85
85
  if (!window.remotion_videoEnabled) {
86
86
  return;
@@ -12,7 +12,7 @@ export const VERSION = '${version}';
12
12
 
13
13
  fs.writeFileSync(path.resolve(process.cwd(), 'src/version.ts'), src);
14
14
 
15
- cp.execSync('npx tsc');
15
+ cp.execSync('pnpm exec tsc');
16
16
 
17
17
  const distFile = fs.readFileSync('dist/version.js', 'utf-8');
18
18
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "remotion",
3
- "version": "3.2.22",
3
+ "version": "3.2.23",
4
4
  "description": "Render videos in React",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -54,5 +54,5 @@
54
54
  "publishConfig": {
55
55
  "access": "public"
56
56
  },
57
- "gitHead": "1c35638566717760bb394e0748b088cea15faff4"
57
+ "gitHead": "34a407a825ded88c9058bcf0e9ec4fe04024b7ce"
58
58
  }
@@ -1,11 +0,0 @@
1
- remotion:lint: cache hit, replaying output a84ebb2d28d1ea54
2
- remotion:lint: 
3
- remotion:lint: > remotion@3.2.12 lint /Users/jonathanburger/remotion/packages/core
4
- remotion:lint: > eslint src --ext ts,tsx
5
- remotion:lint: 
6
- remotion:lint: 
7
- remotion:lint: /Users/jonathanburger/remotion/packages/core/src/use-lazy-component.ts
8
- remotion:lint:  10:50 warning Unexpected any. Specify a different type @typescript-eslint/no-explicit-any
9
- remotion:lint: 
10
- remotion:lint: ✖ 1 problem (0 errors, 1 warning)
11
- remotion:lint: