@remotion/studio 4.0.87 → 4.0.89

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 (62) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/dist/Studio.d.ts +6 -0
  3. package/dist/Studio.js +19 -0
  4. package/dist/components/AssetSelector.js +4 -3
  5. package/dist/components/Button.d.ts +11 -0
  6. package/dist/components/Button.js +35 -0
  7. package/dist/components/CurrentCompositionSideEffects.js +1 -1
  8. package/dist/components/Editor.d.ts +3 -1
  9. package/dist/components/Editor.js +2 -22
  10. package/dist/components/MenuBuildIndicator.js +1 -1
  11. package/dist/components/Modals.js +3 -2
  12. package/dist/components/NewComposition/RemInput.d.ts +2 -2
  13. package/dist/components/NewComposition/RemInputTypeColor.d.ts +1 -1
  14. package/dist/components/NewComposition/RemTextarea.d.ts +1 -1
  15. package/dist/components/NoRegisterRoot.js +2 -3
  16. package/dist/components/Notifications/ServerDisconnected.js +1 -1
  17. package/dist/components/RenderButton.js +4 -3
  18. package/dist/components/RenderModal/DataEditor.js +4 -4
  19. package/dist/components/RenderModal/RenderModal.d.ts +1 -0
  20. package/dist/components/RenderModal/RenderModal.js +7 -2
  21. package/dist/components/RenderModal/RenderModalAdvanced.d.ts +3 -1
  22. package/dist/components/RenderModal/RenderModalAdvanced.js +5 -2
  23. package/dist/components/RenderPreview.js +2 -1
  24. package/dist/components/RenderQueue/actions.d.ts +4 -2
  25. package/dist/components/RenderQueue/actions.js +4 -2
  26. package/dist/components/RenderQueue/index.js +2 -1
  27. package/dist/components/SidebarRenderButton.js +3 -1
  28. package/dist/components/StaticFilePreview.js +2 -1
  29. package/dist/components/Studio.d.ts +4 -0
  30. package/dist/components/Studio.js +16 -0
  31. package/dist/components/render-defaults.d.ts +40 -0
  32. package/dist/components/render-defaults.js +2 -0
  33. package/dist/error-overlay/react-overlay/utils/make-stack-frame.d.ts +7 -0
  34. package/dist/error-overlay/react-overlay/utils/make-stack-frame.js +25 -0
  35. package/dist/helpers/checkerboard-background.d.ts +1 -1
  36. package/dist/helpers/client-id.d.ts +6 -4
  37. package/dist/helpers/client-id.js +92 -9
  38. package/dist/helpers/colors.d.ts +1 -1
  39. package/dist/helpers/presets-labels.d.ts +1 -1
  40. package/dist/helpers/retry-payload.d.ts +3 -0
  41. package/dist/helpers/retry-payload.js +142 -0
  42. package/dist/helpers/use-file-existence.js +5 -6
  43. package/dist/helpers/use-menu-structure.js +1 -1
  44. package/dist/hot-middleware-client/client.d.ts +27 -0
  45. package/dist/hot-middleware-client/client.js +172 -0
  46. package/dist/hot-middleware-client/process-update.d.ts +12 -0
  47. package/dist/hot-middleware-client/process-update.js +157 -0
  48. package/dist/index.d.ts +3 -3
  49. package/dist/preview-server/dev-middleware/range-parser.d.ts +1 -1
  50. package/dist/preview-server/job.d.ts +3 -0
  51. package/dist/preview-server/retry-payload.js +3 -0
  52. package/dist/preview-server/routes/add-render.js +3 -0
  53. package/dist/previewEntry.js +22 -15
  54. package/dist/routes.d.ts +0 -1
  55. package/dist/state/modals.d.ts +1 -0
  56. package/package.json +7 -7
  57. package/tsconfig.tsbuildinfo +1 -1
  58. package/.turbo/turbo-lint.log +0 -10
  59. package/dist/components/BufferingIndicator.d.ts +0 -2
  60. package/dist/components/BufferingIndicator.js +0 -23
  61. package/dist/helpers/event-source.d.ts +0 -3
  62. package/dist/helpers/event-source.js +0 -76
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Studio = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_dom_1 = require("react-dom");
6
+ const remotion_1 = require("remotion");
7
+ const Editor_1 = require("./Editor");
8
+ const EditorContexts_1 = require("./EditorContexts");
9
+ const ServerDisconnected_1 = require("./Notifications/ServerDisconnected");
10
+ const getServerDisconnectedDomElement = () => {
11
+ return document.getElementById('server-disconnected-overlay');
12
+ };
13
+ const Studio = ({ rootComponent }) => {
14
+ return ((0, jsx_runtime_1.jsx)(remotion_1.Internals.RemotionRoot, { numberOfAudioTags: window.remotion_numberOfAudioTags, children: (0, jsx_runtime_1.jsxs)(EditorContexts_1.EditorContexts, { children: [(0, jsx_runtime_1.jsx)(Editor_1.Editor, { Root: rootComponent }), (0, react_dom_1.createPortal)((0, jsx_runtime_1.jsx)(ServerDisconnected_1.ServerDisconnected, {}), getServerDisconnectedDomElement())] }) }));
15
+ };
16
+ exports.Studio = Studio;
@@ -0,0 +1,40 @@
1
+ import type { AudioCodec, Codec, ColorSpace, LogLevel, OpenGlRenderer, PixelFormat, ProResProfile, StillImageFormat, VideoImageFormat, X264Preset } from '@remotion/renderer';
2
+ export type RenderDefaults = {
3
+ jpegQuality: number;
4
+ scale: number;
5
+ logLevel: LogLevel;
6
+ codec: Codec;
7
+ concurrency: number;
8
+ minConcurrency: number;
9
+ muted: boolean;
10
+ maxConcurrency: number;
11
+ stillImageFormat: StillImageFormat;
12
+ videoImageFormat: VideoImageFormat;
13
+ audioCodec: AudioCodec | null;
14
+ enforceAudioTrack: boolean;
15
+ proResProfile: ProResProfile;
16
+ x264Preset: X264Preset;
17
+ pixelFormat: PixelFormat;
18
+ audioBitrate: string | null;
19
+ videoBitrate: string | null;
20
+ encodingBufferSize: string | null;
21
+ encodingMaxRate: string | null;
22
+ userAgent: string | null;
23
+ everyNthFrame: number;
24
+ numberOfGifLoops: number | null;
25
+ delayRenderTimeout: number;
26
+ disableWebSecurity: boolean;
27
+ openGlRenderer: OpenGlRenderer | null;
28
+ ignoreCertificateErrors: boolean;
29
+ offthreadVideoCacheSizeInBytes: number | null;
30
+ headless: boolean;
31
+ colorSpace: ColorSpace;
32
+ multiProcessOnLinux: boolean;
33
+ beepOnFinish: boolean;
34
+ repro: boolean;
35
+ };
36
+ declare global {
37
+ interface Window {
38
+ remotion_renderDefaults: RenderDefaults | undefined;
39
+ }
40
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,7 @@
1
+ import type { StackFrame } from '@remotion/studio-shared';
2
+ export declare const makeStackFrame: ({ functionName, fileName, lineNumber, columnNumber, }: {
3
+ functionName: string | null;
4
+ fileName: string;
5
+ lineNumber: number;
6
+ columnNumber: number;
7
+ }) => StackFrame;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeStackFrame = void 0;
4
+ const makeStackFrame = ({ functionName, fileName, lineNumber, columnNumber, }) => {
5
+ if (functionName && functionName.indexOf('Object.') === 0) {
6
+ functionName = functionName.slice('Object.'.length);
7
+ }
8
+ if (
9
+ // Chrome has a bug with inferring function.name:
10
+ // https://github.com/facebook/create-react-app/issues/2097
11
+ // Let's ignore a meaningless name we get for top-level modules.
12
+ functionName === 'friendlySyntaxErrorLabel' ||
13
+ functionName === 'exports.__esModule' ||
14
+ functionName === '<anonymous>' ||
15
+ !functionName) {
16
+ functionName = null;
17
+ }
18
+ return {
19
+ columnNumber,
20
+ fileName,
21
+ functionName,
22
+ lineNumber,
23
+ };
24
+ };
25
+ exports.makeStackFrame = makeStackFrame;
@@ -1,4 +1,4 @@
1
1
  export declare const getCheckerboardBackgroundSize: (size: number) => string;
2
2
  export declare const getCheckerboardBackgroundPos: (size: number) => string;
3
- export declare const checkerboardBackgroundColor: (checkerboard: boolean) => "white" | "black";
3
+ export declare const checkerboardBackgroundColor: (checkerboard: boolean) => "black" | "white";
4
4
  export declare const checkerboardBackgroundImage: (checkerboard: boolean) => "\n linear-gradient(\n 45deg,\n rgba(0, 0, 0, 0.1) 25%,\n transparent 25%\n ),\n linear-gradient(135deg, rgba(0, 0, 0, 0.1) 25%, transparent 25%),\n linear-gradient(45deg, transparent 75%, rgba(0, 0, 0, 0.1) 75%),\n linear-gradient(135deg, transparent 75%, rgba(0, 0, 0, 0.1) 75%)\n " | undefined;
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ import type { EventSourceEvent } from '../event-source-events';
2
3
  type PreviewServerState = {
3
4
  type: 'init';
4
5
  } | {
@@ -7,10 +8,11 @@ type PreviewServerState = {
7
8
  } | {
8
9
  type: 'disconnected';
9
10
  };
10
- export declare const StudioServerConnectionCtx: React.Context<PreviewServerState>;
11
- export declare const studioServerConnectionRef: React.RefObject<{
12
- set: (jobs: PreviewServerState) => void;
13
- }>;
11
+ type Context = {
12
+ previewServerState: PreviewServerState;
13
+ subscribeToEvent: (type: EventSourceEvent['type'], listener: (event: EventSourceEvent) => void) => () => void;
14
+ };
15
+ export declare const StudioServerConnectionCtx: React.Context<Context>;
14
16
  export declare const PreviewServerConnection: React.FC<{
15
17
  children: React.ReactNode;
16
18
  }>;
@@ -22,25 +22,108 @@ var __importStar = (this && this.__importStar) || function (mod) {
22
22
  __setModuleDefault(result, mod);
23
23
  return result;
24
24
  };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
25
28
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.PreviewServerConnection = exports.studioServerConnectionRef = exports.StudioServerConnectionCtx = void 0;
29
+ exports.PreviewServerConnection = exports.StudioServerConnectionCtx = void 0;
27
30
  const jsx_runtime_1 = require("react/jsx-runtime");
28
31
  const react_1 = __importStar(require("react"));
32
+ const remotion_1 = require("remotion");
33
+ const NotificationCenter_1 = require("../components/Notifications/NotificationCenter");
34
+ const PlayBeepSound_1 = __importDefault(require("../components/PlayBeepSound"));
35
+ const context_1 = require("../components/RenderQueue/context");
29
36
  exports.StudioServerConnectionCtx = react_1.default.createContext({
30
- type: 'init',
37
+ previewServerState: {
38
+ type: 'init',
39
+ },
40
+ subscribeToEvent: () => {
41
+ throw new Error('Context not initalized');
42
+ },
31
43
  });
32
- exports.studioServerConnectionRef = (0, react_1.createRef)();
33
44
  const PreviewServerConnection = ({ children }) => {
45
+ const listeners = (0, react_1.useRef)([]);
46
+ const subscribeToEvent = (0, react_1.useCallback)((type, listener) => {
47
+ listeners.current.push({ type, listener });
48
+ return () => {
49
+ listeners.current = listeners.current.filter((l) => l.type !== type || l.listener !== listener);
50
+ };
51
+ }, []);
52
+ const openEventSource = (0, react_1.useCallback)(() => {
53
+ const source = new EventSource('/events');
54
+ source.addEventListener('message', (event) => {
55
+ var _a;
56
+ const newEvent = JSON.parse(event.data);
57
+ if (newEvent.type === 'new-input-props' ||
58
+ newEvent.type === 'new-env-variables') {
59
+ window.location.reload();
60
+ }
61
+ if (newEvent.type === 'init') {
62
+ setState({
63
+ type: 'connected',
64
+ clientId: newEvent.clientId,
65
+ });
66
+ }
67
+ if (newEvent.type === 'render-queue-updated') {
68
+ (_a = context_1.renderJobsRef.current) === null || _a === void 0 ? void 0 : _a.updateRenderJobs(newEvent.queue);
69
+ for (const job of newEvent.queue) {
70
+ if (job.status === 'done' && job.beepOnFinish) {
71
+ (0, PlayBeepSound_1.default)(job.id);
72
+ }
73
+ }
74
+ }
75
+ if (newEvent.type === 'render-job-failed') {
76
+ (0, NotificationCenter_1.sendErrorNotification)(`Rendering "${newEvent.compositionId}" failed`);
77
+ }
78
+ if (newEvent.type === 'new-public-folder') {
79
+ const payload = {
80
+ files: newEvent.files,
81
+ };
82
+ window.dispatchEvent(new CustomEvent(remotion_1.Internals.WATCH_REMOTION_STATIC_FILES, {
83
+ detail: payload,
84
+ }));
85
+ window.remotion_staticFiles = newEvent.files;
86
+ window.remotion_publicFolderExists = newEvent.folderExists;
87
+ }
88
+ listeners.current.forEach((l) => {
89
+ if (l.type === newEvent.type) {
90
+ l.listener(newEvent);
91
+ }
92
+ });
93
+ });
94
+ source.addEventListener('open', () => {
95
+ source.addEventListener('error', () => {
96
+ setState({ type: 'disconnected' });
97
+ // Display an error message that the studio server has disconnected.
98
+ source === null || source === void 0 ? void 0 : source.close();
99
+ // Retry later
100
+ setTimeout(() => {
101
+ openEventSource();
102
+ }, 1000);
103
+ }, { once: true });
104
+ });
105
+ const close = () => {
106
+ source.close();
107
+ };
108
+ return {
109
+ close,
110
+ };
111
+ }, []);
112
+ (0, react_1.useEffect)(() => {
113
+ const { close } = openEventSource();
114
+ return () => {
115
+ close();
116
+ };
117
+ }, [openEventSource]);
34
118
  const [state, setState] = react_1.default.useState({
35
119
  type: 'init',
36
120
  });
37
- (0, react_1.useImperativeHandle)(exports.studioServerConnectionRef, () => {
121
+ const context = (0, react_1.useMemo)(() => {
38
122
  return {
39
- set: (newState) => {
40
- setState(newState);
41
- },
123
+ previewServerState: state,
124
+ subscribeToEvent,
42
125
  };
43
- }, []);
44
- return ((0, jsx_runtime_1.jsx)(exports.StudioServerConnectionCtx.Provider, { value: state, children: children }));
126
+ }, [state, subscribeToEvent]);
127
+ return ((0, jsx_runtime_1.jsx)(exports.StudioServerConnectionCtx.Provider, { value: context, children: children }));
45
128
  };
46
129
  exports.PreviewServerConnection = PreviewServerConnection;
@@ -23,4 +23,4 @@ export declare const TIMELINE_TRACK_SEPARATOR = "rgba(0, 0, 0, 0.3)";
23
23
  export declare const getBackgroundFromHoverState: ({ selected, hovered, }: {
24
24
  selected: boolean;
25
25
  hovered: boolean;
26
- }) => "transparent" | "hsla(0, 0%, 100%, 0.25)" | "hsla(0, 0%, 100%, 0.15)" | "rgba(255, 255, 255, 0.06)";
26
+ }) => "transparent" | "hsla(0, 0%, 100%, 0.15)" | "hsla(0, 0%, 100%, 0.25)" | "rgba(255, 255, 255, 0.06)";
@@ -1,2 +1,2 @@
1
1
  import type { X264Preset } from '@remotion/renderer';
2
- export declare const labelx264Preset: (profile: X264Preset) => "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo";
2
+ export declare const labelx264Preset: (profile: X264Preset) => "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo";
@@ -0,0 +1,3 @@
1
+ import type { RenderJob } from '@remotion/studio-shared';
2
+ import type { RenderModalState } from '../state/modals';
3
+ export declare const makeRetryPayload: (job: RenderJob) => RenderModalState;
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeRetryPayload = void 0;
4
+ const no_react_1 = require("remotion/no-react");
5
+ const makeRetryPayload = (job) => {
6
+ var _a, _b, _c, _d, _e;
7
+ const defaults = window.remotion_renderDefaults;
8
+ if (!defaults) {
9
+ throw new Error('defaults not set');
10
+ }
11
+ if (job.type === 'still') {
12
+ return {
13
+ type: 'render',
14
+ compositionId: job.compositionId,
15
+ initialFrame: job.frame,
16
+ initialStillImageFormat: job.imageFormat,
17
+ initialVideoImageFormat: defaults.videoImageFormat,
18
+ initialJpegQuality: (_a = job.jpegQuality) !== null && _a !== void 0 ? _a : defaults.jpegQuality,
19
+ initialScale: job.scale,
20
+ initialLogLevel: job.logLevel,
21
+ initialConcurrency: defaults.concurrency,
22
+ maxConcurrency: defaults.maxConcurrency,
23
+ minConcurrency: defaults.minConcurrency,
24
+ initialMuted: defaults.muted,
25
+ initialEnforceAudioTrack: defaults.enforceAudioTrack,
26
+ initialProResProfile: defaults.proResProfile,
27
+ initialx264Preset: defaults.x264Preset,
28
+ initialPixelFormat: defaults.pixelFormat,
29
+ initialAudioBitrate: defaults.audioBitrate,
30
+ initialVideoBitrate: defaults.videoBitrate,
31
+ initialEveryNthFrame: defaults.everyNthFrame,
32
+ initialNumberOfGifLoops: defaults.numberOfGifLoops,
33
+ initialDelayRenderTimeout: job.delayRenderTimeout,
34
+ defaultConfigurationAudioCodec: defaults.audioCodec,
35
+ initialEnvVariables: job.envVariables,
36
+ initialDisableWebSecurity: job.chromiumOptions.disableWebSecurity,
37
+ initialOpenGlRenderer: job.chromiumOptions.gl,
38
+ initialHeadless: job.chromiumOptions.headless,
39
+ initialIgnoreCertificateErrors: job.chromiumOptions.ignoreCertificateErrors,
40
+ defaultProps: no_react_1.NoReactInternals.deserializeJSONWithCustomFields(job.serializedInputPropsWithCustomSchema),
41
+ inFrameMark: null,
42
+ outFrameMark: null,
43
+ initialOffthreadVideoCacheSizeInBytes: job.offthreadVideoCacheSizeInBytes,
44
+ initialColorSpace: defaults.colorSpace,
45
+ initialMultiProcessOnLinux: job.multiProcessOnLinux,
46
+ defaultConfigurationVideoCodec: defaults.codec,
47
+ initialEncodingBufferSize: defaults.encodingBufferSize,
48
+ initialEncodingMaxRate: defaults.encodingMaxRate,
49
+ initialUserAgent: job.chromiumOptions.userAgent,
50
+ initialBeep: job.beepOnFinish,
51
+ initialRepro: job.repro,
52
+ };
53
+ }
54
+ if (job.type === 'sequence') {
55
+ return {
56
+ type: 'render',
57
+ initialFrame: 0,
58
+ compositionId: job.compositionId,
59
+ initialVideoImageFormat: defaults.videoImageFormat,
60
+ initialJpegQuality: (_b = job.jpegQuality) !== null && _b !== void 0 ? _b : defaults.jpegQuality,
61
+ initialScale: job.scale,
62
+ initialLogLevel: job.logLevel,
63
+ initialConcurrency: defaults.concurrency,
64
+ maxConcurrency: defaults.maxConcurrency,
65
+ minConcurrency: defaults.minConcurrency,
66
+ initialMuted: defaults.muted,
67
+ initialEnforceAudioTrack: defaults.enforceAudioTrack,
68
+ initialProResProfile: defaults.proResProfile,
69
+ initialx264Preset: defaults.x264Preset,
70
+ initialPixelFormat: defaults.pixelFormat,
71
+ initialAudioBitrate: defaults.audioBitrate,
72
+ initialVideoBitrate: defaults.videoBitrate,
73
+ initialEveryNthFrame: defaults.everyNthFrame,
74
+ initialNumberOfGifLoops: defaults.numberOfGifLoops,
75
+ initialDelayRenderTimeout: job.delayRenderTimeout,
76
+ initialEnvVariables: job.envVariables,
77
+ initialDisableWebSecurity: job.chromiumOptions.disableWebSecurity,
78
+ initialOpenGlRenderer: job.chromiumOptions.gl,
79
+ initialHeadless: job.chromiumOptions.headless,
80
+ initialIgnoreCertificateErrors: job.chromiumOptions.ignoreCertificateErrors,
81
+ defaultProps: no_react_1.NoReactInternals.deserializeJSONWithCustomFields(job.serializedInputPropsWithCustomSchema),
82
+ initialStillImageFormat: defaults.stillImageFormat,
83
+ inFrameMark: job.startFrame,
84
+ outFrameMark: job.endFrame,
85
+ initialOffthreadVideoCacheSizeInBytes: job.offthreadVideoCacheSizeInBytes,
86
+ initialColorSpace: defaults.colorSpace,
87
+ initialMultiProcessOnLinux: job.multiProcessOnLinux,
88
+ defaultConfigurationVideoCodec: defaults.codec,
89
+ defaultConfigurationAudioCodec: defaults.audioCodec,
90
+ initialEncodingBufferSize: defaults.encodingBufferSize,
91
+ initialEncodingMaxRate: defaults.encodingMaxRate,
92
+ initialUserAgent: job.chromiumOptions.userAgent,
93
+ initialBeep: job.beepOnFinish,
94
+ initialRepro: job.repro,
95
+ };
96
+ }
97
+ if (job.type === 'video') {
98
+ return {
99
+ type: 'render',
100
+ compositionId: job.compositionId,
101
+ initialStillImageFormat: defaults.stillImageFormat,
102
+ initialVideoImageFormat: job.imageFormat,
103
+ initialJpegQuality: (_c = job.jpegQuality) !== null && _c !== void 0 ? _c : defaults.jpegQuality,
104
+ initialScale: job.scale,
105
+ initialLogLevel: job.logLevel,
106
+ initialFrame: 0,
107
+ initialConcurrency: job.concurrency,
108
+ maxConcurrency: defaults.maxConcurrency,
109
+ minConcurrency: defaults.minConcurrency,
110
+ initialMuted: job.muted,
111
+ initialEnforceAudioTrack: job.enforceAudioTrack,
112
+ initialProResProfile: (_d = job.proResProfile) !== null && _d !== void 0 ? _d : defaults.proResProfile,
113
+ initialx264Preset: (_e = job.x264Preset) !== null && _e !== void 0 ? _e : defaults.x264Preset,
114
+ initialPixelFormat: job.pixelFormat,
115
+ initialAudioBitrate: job.audioBitrate,
116
+ initialVideoBitrate: job.videoBitrate,
117
+ initialEveryNthFrame: job.everyNthFrame,
118
+ initialNumberOfGifLoops: job.numberOfGifLoops,
119
+ initialDelayRenderTimeout: job.delayRenderTimeout,
120
+ initialEnvVariables: job.envVariables,
121
+ initialDisableWebSecurity: job.chromiumOptions.disableWebSecurity,
122
+ initialOpenGlRenderer: job.chromiumOptions.gl,
123
+ initialHeadless: job.chromiumOptions.headless,
124
+ initialIgnoreCertificateErrors: job.chromiumOptions.ignoreCertificateErrors,
125
+ defaultProps: no_react_1.NoReactInternals.deserializeJSONWithCustomFields(job.serializedInputPropsWithCustomSchema),
126
+ inFrameMark: job.startFrame,
127
+ outFrameMark: job.endFrame,
128
+ initialOffthreadVideoCacheSizeInBytes: job.offthreadVideoCacheSizeInBytes,
129
+ initialColorSpace: job.colorSpace,
130
+ initialMultiProcessOnLinux: job.multiProcessOnLinux,
131
+ defaultConfigurationVideoCodec: job.codec,
132
+ defaultConfigurationAudioCodec: job.audioCodec,
133
+ initialEncodingBufferSize: job.encodingBufferSize,
134
+ initialEncodingMaxRate: job.encodingMaxRate,
135
+ initialUserAgent: job.chromiumOptions.userAgent,
136
+ initialBeep: job.beepOnFinish,
137
+ initialRepro: job.repro,
138
+ };
139
+ }
140
+ throw new Error(`Job ${JSON.stringify(job)} Not implemented`);
141
+ };
142
+ exports.makeRetryPayload = makeRetryPayload;
@@ -4,10 +4,9 @@ exports.useFileExistence = void 0;
4
4
  const react_1 = require("react");
5
5
  const actions_1 = require("../components/RenderQueue/actions");
6
6
  const client_id_1 = require("./client-id");
7
- const event_source_1 = require("./event-source");
8
7
  const useFileExistence = (outName) => {
9
8
  const [exists, setExists] = (0, react_1.useState)(false);
10
- const state = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
9
+ const { previewServerState: state, subscribeToEvent } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
11
10
  const clientId = state.type === 'connected' ? state.clientId : undefined;
12
11
  const currentOutName = (0, react_1.useRef)('');
13
12
  currentOutName.current = outName;
@@ -39,11 +38,11 @@ const useFileExistence = (outName) => {
39
38
  setExists(false);
40
39
  }
41
40
  };
42
- const unsub = (0, event_source_1.subscribeToEvent)('watched-file-deleted', listener);
41
+ const unsub = subscribeToEvent('watched-file-deleted', listener);
43
42
  return () => {
44
43
  unsub();
45
44
  };
46
- }, [outName]);
45
+ }, [outName, subscribeToEvent]);
47
46
  (0, react_1.useEffect)(() => {
48
47
  const listener = (event) => {
49
48
  if (event.type !== 'watched-file-undeleted') {
@@ -56,11 +55,11 @@ const useFileExistence = (outName) => {
56
55
  setExists(true);
57
56
  }
58
57
  };
59
- const unsub = (0, event_source_1.subscribeToEvent)('watched-file-undeleted', listener);
58
+ const unsub = subscribeToEvent('watched-file-undeleted', listener);
60
59
  return () => {
61
60
  unsub();
62
61
  };
63
- }, [outName]);
62
+ }, [outName, subscribeToEvent]);
64
63
  return exists;
65
64
  };
66
65
  exports.useFileExistence = useFileExistence;
@@ -38,7 +38,7 @@ const useMenuStructure = (closeMenu) => {
38
38
  const { editorShowRulers, setEditorShowRulers } = (0, react_1.useContext)(editor_rulers_1.EditorShowRulersContext);
39
39
  const { editorShowGuides, setEditorShowGuides } = (0, react_1.useContext)(editor_guides_1.EditorShowGuidesContext);
40
40
  const { size, setSize } = (0, react_1.useContext)(preview_size_1.PreviewSizeContext);
41
- const { type } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
41
+ const { type } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx).previewServerState;
42
42
  const { setSidebarCollapsedState, sidebarCollapsedStateLeft, sidebarCollapsedStateRight, } = (0, react_1.useContext)(sidebar_1.SidebarContext);
43
43
  const sizes = (0, SizeSelector_1.getUniqueSizes)(size);
44
44
  const isFullscreenSupported = document.fullscreenEnabled || document.webkitFullscreenEnabled;
@@ -0,0 +1,27 @@
1
+ /// <reference lib="dom" />
2
+ /// <reference lib="dom.iterable" />
3
+ /**
4
+ * Source code is adapted from
5
+ * https://github.com/webpack-contrib/webpack-hot-middleware#readme
6
+ * and rewritten in TypeScript. This file is MIT licensed
7
+ */
8
+ import type { HotMiddlewareMessage } from '@remotion/studio-shared';
9
+ declare function eventSourceWrapper(): {
10
+ addMessageListener(fn: (msg: MessageEvent) => void): void;
11
+ };
12
+ declare global {
13
+ interface Window {
14
+ __whmEventSourceWrapper: {
15
+ [key: string]: ReturnType<typeof eventSourceWrapper>;
16
+ };
17
+ __webpack_hot_middleware_reporter__: Reporter;
18
+ }
19
+ }
20
+ type Reporter = ReturnType<typeof createReporter>;
21
+ declare function createReporter(): {
22
+ cleanProblemsCache(): void;
23
+ problems(type: 'errors' | 'warnings', obj: HotMiddlewareMessage): boolean;
24
+ success: () => undefined;
25
+ };
26
+ export declare const enableHotMiddleware: () => void;
27
+ export {};
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ /// <reference lib="dom" />
3
+ /// <reference lib="dom.iterable" />
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.enableHotMiddleware = void 0;
6
+ const studio_shared_1 = require("@remotion/studio-shared");
7
+ const process_update_1 = require("./process-update");
8
+ function eventSourceWrapper() {
9
+ let source;
10
+ let lastActivity = Date.now();
11
+ const listeners = [];
12
+ init();
13
+ const timer = setInterval(() => {
14
+ if (Date.now() - lastActivity > studio_shared_1.hotMiddlewareOptions.timeout) {
15
+ handleDisconnect();
16
+ }
17
+ }, studio_shared_1.hotMiddlewareOptions.timeout / 2);
18
+ function init() {
19
+ source = new window.EventSource(studio_shared_1.hotMiddlewareOptions.path);
20
+ source.onopen = handleOnline;
21
+ source.onerror = handleDisconnect;
22
+ source.onmessage = handleMessage;
23
+ }
24
+ function handleOnline() {
25
+ lastActivity = Date.now();
26
+ }
27
+ function handleMessage(event) {
28
+ lastActivity = Date.now();
29
+ for (let i = 0; i < listeners.length; i++) {
30
+ listeners[i](event);
31
+ }
32
+ }
33
+ function handleDisconnect() {
34
+ clearInterval(timer);
35
+ source.close();
36
+ setTimeout(init, 1000);
37
+ }
38
+ return {
39
+ addMessageListener(fn) {
40
+ listeners.push(fn);
41
+ },
42
+ };
43
+ }
44
+ function getEventSourceWrapper() {
45
+ if (!window.__whmEventSourceWrapper) {
46
+ window.__whmEventSourceWrapper = {};
47
+ }
48
+ if (!window.__whmEventSourceWrapper[studio_shared_1.hotMiddlewareOptions.path]) {
49
+ // cache the wrapper for other entries loaded on
50
+ // the same page with the same hotMiddlewareOptions.path
51
+ window.__whmEventSourceWrapper[studio_shared_1.hotMiddlewareOptions.path] =
52
+ eventSourceWrapper();
53
+ }
54
+ return window.__whmEventSourceWrapper[studio_shared_1.hotMiddlewareOptions.path];
55
+ }
56
+ function connect() {
57
+ getEventSourceWrapper().addMessageListener(handleMessage);
58
+ function handleMessage(event) {
59
+ if (event.data === '\uD83D\uDC93') {
60
+ return;
61
+ }
62
+ try {
63
+ processMessage(JSON.parse(event.data));
64
+ }
65
+ catch (ex) {
66
+ if (studio_shared_1.hotMiddlewareOptions.warn) {
67
+ console.warn('Invalid HMR message: ' + event.data + '\n' + ex);
68
+ }
69
+ }
70
+ }
71
+ }
72
+ function createReporter() {
73
+ const styles = {
74
+ errors: 'color: #ff0000;',
75
+ warnings: 'color: #999933;',
76
+ };
77
+ let previousProblems = null;
78
+ function log(type, obj) {
79
+ if (obj.action === 'building') {
80
+ console.log('[Fast Refresh] Building');
81
+ return;
82
+ }
83
+ const newProblems = obj[type]
84
+ .map((msg) => {
85
+ return (0, studio_shared_1.stripAnsi)(msg);
86
+ })
87
+ .join('\n');
88
+ if (previousProblems === newProblems) {
89
+ return;
90
+ }
91
+ previousProblems = newProblems;
92
+ const style = styles[type];
93
+ const name = obj.name ? "'" + obj.name + "' " : '';
94
+ const title = '[Fast Refresh] bundle ' + name + 'has ' + obj[type].length + ' ' + type;
95
+ // NOTE: console.warn or console.error will print the stack trace
96
+ // which isn't helpful here, so using console.log to escape it.
97
+ if (console.group && console.groupEnd) {
98
+ console.group('%c' + title, style);
99
+ console.log('%c' + newProblems, style);
100
+ console.groupEnd();
101
+ }
102
+ else {
103
+ console.log('%c' + title + '\n\t%c' + newProblems.replace(/\n/g, '\n\t'), style + 'font-weight: bold;', style + 'font-weight: normal;');
104
+ }
105
+ }
106
+ return {
107
+ cleanProblemsCache() {
108
+ previousProblems = null;
109
+ },
110
+ problems(type, obj) {
111
+ if (studio_shared_1.hotMiddlewareOptions.warn) {
112
+ log(type, obj);
113
+ }
114
+ return true;
115
+ },
116
+ success: () => undefined,
117
+ };
118
+ }
119
+ function processMessage(obj) {
120
+ var _a, _b;
121
+ switch (obj.action) {
122
+ case 'building':
123
+ (_a = window.remotion_isBuilding) === null || _a === void 0 ? void 0 : _a.call(window);
124
+ break;
125
+ case 'sync':
126
+ case 'built': {
127
+ let applyUpdate = true;
128
+ if (obj.errors.length > 0) {
129
+ if (reporter)
130
+ reporter.problems('errors', obj);
131
+ applyUpdate = false;
132
+ }
133
+ else if (obj.warnings.length > 0) {
134
+ if (reporter) {
135
+ const overlayShown = reporter.problems('warnings', obj);
136
+ applyUpdate = overlayShown;
137
+ }
138
+ }
139
+ else if (reporter) {
140
+ reporter.cleanProblemsCache();
141
+ reporter.success();
142
+ }
143
+ if (applyUpdate) {
144
+ (_b = window.remotion_finishedBuilding) === null || _b === void 0 ? void 0 : _b.call(window);
145
+ (0, process_update_1.processUpdate)(obj.hash, obj.modules, studio_shared_1.hotMiddlewareOptions);
146
+ }
147
+ break;
148
+ }
149
+ default:
150
+ break;
151
+ }
152
+ }
153
+ let reporter;
154
+ const singletonKey = '__webpack_hot_middleware_reporter__';
155
+ const enableHotMiddleware = () => {
156
+ if (typeof window === 'undefined') {
157
+ // do nothing
158
+ }
159
+ else if (typeof window.EventSource === 'undefined') {
160
+ console.warn('Unsupported browser: You need a browser that supports EventSource ');
161
+ }
162
+ else {
163
+ connect();
164
+ }
165
+ if (typeof window !== 'undefined') {
166
+ if (!window[singletonKey]) {
167
+ window[singletonKey] = createReporter();
168
+ }
169
+ reporter = window[singletonKey];
170
+ }
171
+ };
172
+ exports.enableHotMiddleware = enableHotMiddleware;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Source code is adapted from
3
+ * https://github.com/webpack-contrib/webpack-hot-middleware#readme
4
+ * and rewritten in TypeScript. This file is MIT licensed
5
+ */
6
+ /**
7
+ * Based heavily on https://github.com/webpack/webpack/blob/
8
+ * c0afdf9c6abc1dd70707c594e473802a566f7b6e/hot/only-dev-server.js
9
+ * Original copyright Tobias Koppers @sokra (MIT license)
10
+ */
11
+ import type { HotMiddlewareOptions, ModuleMap } from '@remotion/studio-shared';
12
+ export declare const processUpdate: (hash: string | undefined, moduleMap: ModuleMap, options: HotMiddlewareOptions) => void;