@remotion/studio-server 4.0.512 → 4.0.514

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 (68) hide show
  1. package/dist/codemods/delete-jsx-node.d.ts +2 -5
  2. package/dist/codemods/delete-jsx-node.js +23 -341
  3. package/dist/codemods/duplicate-composition.d.ts +1 -9
  4. package/dist/codemods/duplicate-composition.js +3 -49
  5. package/dist/codemods/format-inline-content.d.ts +2 -5
  6. package/dist/codemods/format-inline-content.js +20 -50
  7. package/dist/codemods/parse-ast.d.ts +1 -0
  8. package/dist/codemods/parse-ast.js +5 -1
  9. package/dist/codemods/recast-mods.js +0 -18
  10. package/dist/codemods/reorder-sequence.d.ts +2 -2
  11. package/dist/codemods/reorder-sequence.js +12 -112
  12. package/dist/codemods/split-jsx-sequence.d.ts +1 -2
  13. package/dist/codemods/split-jsx-sequence.js +11 -298
  14. package/dist/codemods/split-video-from-audio.d.ts +15 -0
  15. package/dist/codemods/split-video-from-audio.js +15 -0
  16. package/dist/codemods/update-default-props.d.ts +2 -6
  17. package/dist/codemods/update-default-props.js +12 -220
  18. package/dist/codemods/update-keyframes/ensure-imports-and-frame-hook.d.ts +1 -4
  19. package/dist/codemods/update-keyframes/ensure-imports-and-frame-hook.js +5 -102
  20. package/dist/codemods/update-keyframes/update-keyframes.d.ts +8 -93
  21. package/dist/codemods/update-keyframes/update-keyframes.js +11 -1302
  22. package/dist/codemods/update-sequence-props/update-sequence-props.d.ts +4 -1
  23. package/dist/codemods/update-sequence-props/update-sequence-props.js +47 -3
  24. package/dist/detect-outdated-remotion-skills.d.ts +7 -0
  25. package/dist/detect-outdated-remotion-skills.js +11 -5
  26. package/dist/helpers/resolve-composition-component.d.ts +3 -11
  27. package/dist/helpers/resolve-composition-component.js +38 -1495
  28. package/dist/index.d.ts +3 -2
  29. package/dist/index.js +1 -0
  30. package/dist/max-timeline-tracks.d.ts +2 -1
  31. package/dist/max-timeline-tracks.js +10 -4
  32. package/dist/preview-server/api-routes.js +4 -0
  33. package/dist/preview-server/routes/add-effect.js +1 -1
  34. package/dist/preview-server/routes/apply-codemod.js +3 -3
  35. package/dist/preview-server/routes/apply-visual-control-change.js +3 -3
  36. package/dist/preview-server/routes/can-update-effect-props.js +3 -0
  37. package/dist/preview-server/routes/can-update-sequence-props.d.ts +26 -0
  38. package/dist/preview-server/routes/can-update-sequence-props.js +437 -61
  39. package/dist/preview-server/routes/default-editor.js +4 -1
  40. package/dist/preview-server/routes/delete-effect.js +1 -1
  41. package/dist/preview-server/routes/delete-jsx-node.js +1 -1
  42. package/dist/preview-server/routes/duplicate-effect.js +1 -1
  43. package/dist/preview-server/routes/duplicate-jsx-node.js +1 -1
  44. package/dist/preview-server/routes/element-install-plan.d.ts +1 -1
  45. package/dist/preview-server/routes/insert-element.js +2 -2
  46. package/dist/preview-server/routes/insert-jsx-element.js +1 -1
  47. package/dist/preview-server/routes/log-updates/log-effect-update.js +2 -1
  48. package/dist/preview-server/routes/log-updates/log-update.js +2 -1
  49. package/dist/preview-server/routes/paste-effects.js +1 -1
  50. package/dist/preview-server/routes/remotion-skills-info.d.ts +7 -0
  51. package/dist/preview-server/routes/remotion-skills-info.js +24 -0
  52. package/dist/preview-server/routes/reorder-effect.js +1 -1
  53. package/dist/preview-server/routes/reorder-sequence.js +1 -1
  54. package/dist/preview-server/routes/save-sequence-props.js +27 -4
  55. package/dist/preview-server/routes/source-file-write-queue.d.ts +1 -0
  56. package/dist/preview-server/routes/source-file-write-queue.js +11 -2
  57. package/dist/preview-server/routes/split-jsx-sequence.js +1 -1
  58. package/dist/preview-server/routes/split-video-from-audio.d.ts +3 -0
  59. package/dist/preview-server/routes/split-video-from-audio.js +80 -0
  60. package/dist/preview-server/routes/subscribe-to-sequence-props.d.ts +2 -2
  61. package/dist/preview-server/routes/subscribe-to-sequence-props.js +37 -3
  62. package/dist/preview-server/routes/update-default-props.js +1 -1
  63. package/dist/preview-server/sequence-props-watchers.d.ts +2 -1
  64. package/dist/preview-server/sequence-props-watchers.js +33 -2
  65. package/dist/preview-server/start-server.js +188 -140
  66. package/dist/preview-server/undo-stack.d.ts +3 -52
  67. package/dist/preview-server/update-available.js +4 -4
  68. package/package.json +8 -8
@@ -29,171 +29,219 @@ const startServer = async (options) => {
29
29
  });
30
30
  return detection.type === 'match' ? 'stop' : 'continue';
31
31
  };
32
- const watchIgnorePlugin = new bundler_1.WatchIgnoreNextChangePlugin((...args) => {
33
- renderer_1.RenderInternals.Log.trace({ indent: false, logLevel: options.logLevel }, ...args);
32
+ let portSelection = await renderer_1.RenderInternals.getDesiredPort({
33
+ desiredPort,
34
+ from: 3000,
35
+ to: 3100,
36
+ hostsToTry: portConfig.hostsToTry,
37
+ onPortUnavailable,
34
38
  });
35
- const configArgs = {
36
- entry: options.entry,
37
- userDefinedComponent: options.userDefinedComponent,
38
- outDir: null,
39
- environment: 'development',
40
- bundlerOverride: options.bundlerOverride,
41
- rspackOverride: options.rspackOverride,
42
- webpackOverride: options === null || options === void 0 ? void 0 : options.webpackOverride,
43
- remotionRoot: options.remotionRoot,
44
- poll: options.poll,
45
- extraPlugins: [watchIgnorePlugin],
46
- };
47
- let compiler;
48
- if (options.rspack) {
49
- const [, rspackConf] = await bundler_1.BundlerInternals.rspackConfig(configArgs);
50
- compiler = bundler_1.BundlerInternals.createRspackCompiler(rspackConf);
51
- }
52
- else {
53
- const [, webpackConf] = await bundler_1.BundlerInternals.webpackConfig(configArgs);
54
- compiler = (0, bundler_1.webpack)(webpackConf);
55
- }
56
- (0, watch_ignore_next_change_1.setWatchIgnoreNextChangePlugin)(watchIgnorePlugin);
57
- const wdmMiddleware = (0, dev_middleware_1.wdm)(compiler, options.logLevel);
58
- const liveEventsServer = (0, live_events_1.makeLiveEventsRouter)(options.logLevel, () => {
59
- const undoStack = (0, undo_stack_1.getUndoStack)();
60
- const redoStack = (0, undo_stack_1.getRedoStack)();
39
+ if (portSelection.didUsePort) {
40
+ portSelection.unlockPort();
61
41
  return {
62
- undoFile: undoStack.length > 0 ? undoStack[undoStack.length - 1].filePath : null,
63
- redoFile: redoStack.length > 0 ? redoStack[redoStack.length - 1].filePath : null,
42
+ type: 'already-running',
43
+ port: portSelection.port,
64
44
  };
65
- });
66
- (0, hot_middleware_1.setupWebpackHmr)(compiler, options.logLevel, liveEventsServer);
67
- compiler.hooks.done.tap('remotion-node-path-cache', () => {
68
- (0, node_path_cache_1.clearNodePathCache)();
69
- });
70
- const server = node_http_1.default.createServer((request, response) => {
71
- if (options.enableCrossSiteIsolation) {
72
- response.setHeader('Cross-Origin-Opener-Policy', 'same-origin');
73
- response.setHeader('Cross-Origin-Embedder-Policy', 'credentialless');
74
- }
75
- new Promise((resolve) => {
76
- wdmMiddleware(request, response, () => {
77
- resolve();
78
- });
79
- })
80
- .then(() => {
81
- return (0, routes_1.handleRoutes)({
82
- staticHash: options.staticHash,
83
- staticHashPrefix: options.staticHashPrefix,
84
- outputHash: options.outputHash,
85
- outputHashPrefix: options.outputHashPrefix,
86
- request: request,
87
- response,
88
- liveEventsServer,
89
- getCurrentInputProps: options.getCurrentInputProps,
90
- getEnvVariables: options.getEnvVariables,
91
- remotionRoot: options.remotionRoot,
92
- entryPoint: options.userDefinedComponent,
93
- publicDir: options.publicDir,
94
- logLevel: options.logLevel,
95
- getRenderQueue: options.getRenderQueue,
96
- getRenderDefaults: options.getRenderDefaults,
97
- getNumberOfAudioTags: options.getNumberOfAudioTags,
98
- queueMethods: options.queueMethods,
99
- gitSource: options.gitSource,
100
- binariesDirectory: options.binariesDirectory,
101
- getAudioLatencyHint: options.getAudioLatencyHint,
102
- getExperimentalKeepAudioContextAlive: options.getExperimentalKeepAudioContextAlive,
103
- getPreviewSampleRate: options.getPreviewSampleRate,
104
- enableCrossSiteIsolation: options.enableCrossSiteIsolation,
105
- getStudioRuntimeConfig: options.getStudioRuntimeConfig,
106
- getDefaultCodingAgent: options.getDefaultCodingAgent,
107
- getDefaultEditor: options.getDefaultEditor,
108
- configFile: options.configFile,
109
- });
110
- })
111
- .catch((err) => {
112
- renderer_1.RenderInternals.Log.error({ indent: false, logLevel: options.logLevel }, `Error while calling ${request.url}`, err);
113
- if (!response.headersSent) {
114
- response.setHeader('content-type', 'application/json');
115
- response.writeHead(500);
116
- }
117
- if (!response.writableEnded) {
118
- response.end(JSON.stringify({
119
- err: err.message,
120
- }));
121
- }
122
- });
123
- });
45
+ }
46
+ const handleRequestBeforeReady = (_request, response) => {
47
+ response.writeHead(503);
48
+ response.end('Studio is starting...');
49
+ };
50
+ const server = node_http_1.default.createServer(handleRequestBeforeReady);
124
51
  const maxTries = 5;
52
+ let selectedPort = null;
125
53
  for (let i = 0; i < maxTries; i++) {
126
54
  try {
127
- const { port, unlockPort, didUsePort } = await renderer_1.RenderInternals.getDesiredPort({
128
- desiredPort,
129
- from: 3000,
130
- to: 3100,
131
- hostsToTry: portConfig.hostsToTry,
132
- onPortUnavailable,
133
- });
134
- if (didUsePort) {
135
- unlockPort();
136
- await Promise.all([
137
- new Promise((resolve) => {
138
- server.close(() => resolve());
139
- }),
140
- new Promise((resolve) => {
141
- compiler.close(() => resolve());
142
- }),
143
- ]);
144
- return {
145
- type: 'already-running',
146
- port,
147
- };
148
- }
149
- const selectedPort = await new Promise((resolve, reject) => {
55
+ const { port, unlockPort } = portSelection;
56
+ selectedPort = await new Promise((resolve, reject) => {
150
57
  renderer_1.RenderInternals.Log.verbose({ indent: false, logLevel: options.logLevel }, `Binding server to host ${portConfig.host}, port ${port}`);
58
+ const onListening = () => {
59
+ server.off('error', onError);
60
+ unlockPort();
61
+ resolve(port);
62
+ };
63
+ const onError = (error) => {
64
+ server.off('listening', onListening);
65
+ reject(error);
66
+ };
67
+ server.once('listening', onListening);
68
+ server.once('error', onError);
151
69
  server.listen({
152
70
  port,
153
71
  host: portConfig.host,
154
72
  });
155
- server.on('listening', () => {
156
- resolve(port);
157
- return unlockPort();
158
- });
159
- server.on('error', (err) => {
160
- reject(err);
161
- });
162
73
  });
163
- return {
164
- type: 'started',
165
- port: selectedPort,
166
- liveEventsServer,
167
- close: async () => {
168
- server.closeAllConnections();
169
- await Promise.all([
170
- new Promise((resolve) => {
171
- server.close(() => {
172
- resolve();
173
- });
174
- }),
175
- new Promise((resolve) => {
176
- compiler.close(() => {
177
- resolve();
178
- });
179
- }),
180
- ]);
181
- },
182
- };
74
+ break;
183
75
  }
184
76
  catch (err) {
185
77
  if (!(err instanceof Error)) {
78
+ portSelection.unlockPort();
186
79
  throw err;
187
80
  }
188
81
  const codedError = err;
189
82
  if (codedError.code === 'EADDRINUSE') {
83
+ portSelection.unlockPort();
190
84
  renderer_1.RenderInternals.Log.error({ indent: false, logLevel: options.logLevel }, `Port ${codedError.port} is already in use. Trying another port...`);
85
+ if (i === maxTries - 1) {
86
+ break;
87
+ }
88
+ portSelection = await renderer_1.RenderInternals.getDesiredPort({
89
+ desiredPort,
90
+ from: 3000,
91
+ to: 3100,
92
+ hostsToTry: portConfig.hostsToTry,
93
+ onPortUnavailable,
94
+ });
95
+ if (portSelection.didUsePort) {
96
+ portSelection.unlockPort();
97
+ return {
98
+ type: 'already-running',
99
+ port: portSelection.port,
100
+ };
101
+ }
191
102
  }
192
103
  else {
104
+ portSelection.unlockPort();
193
105
  throw err;
194
106
  }
195
107
  }
196
108
  }
197
- throw new Error(`Tried ${maxTries} times to find a free port. Giving up.`);
109
+ if (selectedPort === null) {
110
+ throw new Error(`Tried ${maxTries} times to find a free port. Giving up.`);
111
+ }
112
+ let compiler = null;
113
+ try {
114
+ const watchIgnorePlugin = new bundler_1.WatchIgnoreNextChangePlugin((...args) => {
115
+ renderer_1.RenderInternals.Log.trace({ indent: false, logLevel: options.logLevel }, ...args);
116
+ });
117
+ const configArgs = {
118
+ entry: options.entry,
119
+ userDefinedComponent: options.userDefinedComponent,
120
+ outDir: null,
121
+ environment: 'development',
122
+ bundlerOverride: options.bundlerOverride,
123
+ rspackOverride: options.rspackOverride,
124
+ webpackOverride: options === null || options === void 0 ? void 0 : options.webpackOverride,
125
+ remotionRoot: options.remotionRoot,
126
+ poll: options.poll,
127
+ extraPlugins: [watchIgnorePlugin],
128
+ };
129
+ if (options.rspack) {
130
+ const [, rspackConf] = await bundler_1.BundlerInternals.rspackConfig(configArgs);
131
+ compiler = bundler_1.BundlerInternals.createRspackCompiler(rspackConf);
132
+ }
133
+ else {
134
+ const [, webpackConf] = await bundler_1.BundlerInternals.webpackConfig(configArgs);
135
+ compiler = (0, bundler_1.webpack)(webpackConf);
136
+ }
137
+ (0, watch_ignore_next_change_1.setWatchIgnoreNextChangePlugin)(watchIgnorePlugin);
138
+ const wdmMiddleware = (0, dev_middleware_1.wdm)(compiler, options.logLevel);
139
+ const liveEventsServer = (0, live_events_1.makeLiveEventsRouter)(options.logLevel, () => {
140
+ const undoStack = (0, undo_stack_1.getUndoStack)();
141
+ const redoStack = (0, undo_stack_1.getRedoStack)();
142
+ return {
143
+ undoFile: undoStack.length > 0
144
+ ? undoStack[undoStack.length - 1].filePath
145
+ : null,
146
+ redoFile: redoStack.length > 0
147
+ ? redoStack[redoStack.length - 1].filePath
148
+ : null,
149
+ };
150
+ });
151
+ (0, hot_middleware_1.setupWebpackHmr)(compiler, options.logLevel, liveEventsServer);
152
+ compiler.hooks.done.tap('remotion-node-path-cache', () => {
153
+ (0, node_path_cache_1.clearNodePathCache)();
154
+ });
155
+ server.off('request', handleRequestBeforeReady);
156
+ server.on('request', (request, response) => {
157
+ if (options.enableCrossSiteIsolation) {
158
+ response.setHeader('Cross-Origin-Opener-Policy', 'same-origin');
159
+ response.setHeader('Cross-Origin-Embedder-Policy', 'credentialless');
160
+ }
161
+ new Promise((resolve) => {
162
+ wdmMiddleware(request, response, () => {
163
+ resolve();
164
+ });
165
+ })
166
+ .then(() => {
167
+ return (0, routes_1.handleRoutes)({
168
+ staticHash: options.staticHash,
169
+ staticHashPrefix: options.staticHashPrefix,
170
+ outputHash: options.outputHash,
171
+ outputHashPrefix: options.outputHashPrefix,
172
+ request: request,
173
+ response,
174
+ liveEventsServer,
175
+ getCurrentInputProps: options.getCurrentInputProps,
176
+ getEnvVariables: options.getEnvVariables,
177
+ remotionRoot: options.remotionRoot,
178
+ entryPoint: options.userDefinedComponent,
179
+ publicDir: options.publicDir,
180
+ logLevel: options.logLevel,
181
+ getRenderQueue: options.getRenderQueue,
182
+ getRenderDefaults: options.getRenderDefaults,
183
+ getNumberOfAudioTags: options.getNumberOfAudioTags,
184
+ queueMethods: options.queueMethods,
185
+ gitSource: options.gitSource,
186
+ binariesDirectory: options.binariesDirectory,
187
+ getAudioLatencyHint: options.getAudioLatencyHint,
188
+ getExperimentalKeepAudioContextAlive: options.getExperimentalKeepAudioContextAlive,
189
+ getPreviewSampleRate: options.getPreviewSampleRate,
190
+ enableCrossSiteIsolation: options.enableCrossSiteIsolation,
191
+ getStudioRuntimeConfig: options.getStudioRuntimeConfig,
192
+ getDefaultCodingAgent: options.getDefaultCodingAgent,
193
+ getDefaultEditor: options.getDefaultEditor,
194
+ configFile: options.configFile,
195
+ });
196
+ })
197
+ .catch((err) => {
198
+ renderer_1.RenderInternals.Log.error({ indent: false, logLevel: options.logLevel }, `Error while calling ${request.url}`, err);
199
+ if (!response.headersSent) {
200
+ response.setHeader('content-type', 'application/json');
201
+ response.writeHead(500);
202
+ }
203
+ if (!response.writableEnded) {
204
+ response.end(JSON.stringify({
205
+ err: err.message,
206
+ }));
207
+ }
208
+ });
209
+ });
210
+ const initializedCompiler = compiler;
211
+ return {
212
+ type: 'started',
213
+ port: selectedPort,
214
+ liveEventsServer,
215
+ close: async () => {
216
+ server.closeAllConnections();
217
+ await Promise.all([
218
+ new Promise((resolve) => {
219
+ server.close(() => {
220
+ resolve();
221
+ });
222
+ }),
223
+ new Promise((resolve) => {
224
+ initializedCompiler.close(() => {
225
+ resolve();
226
+ });
227
+ }),
228
+ ]);
229
+ },
230
+ };
231
+ }
232
+ catch (error) {
233
+ server.closeAllConnections();
234
+ await Promise.all([
235
+ new Promise((resolve) => {
236
+ server.close(() => resolve());
237
+ }),
238
+ compiler
239
+ ? new Promise((resolve) => {
240
+ compiler === null || compiler === void 0 ? void 0 : compiler.close(() => resolve());
241
+ })
242
+ : Promise.resolve(),
243
+ ]);
244
+ throw error;
245
+ }
198
246
  };
199
247
  exports.startServer = startServer;
@@ -4,7 +4,7 @@ export interface UndoEntryDescription {
4
4
  undoMessage: string;
5
5
  redoMessage: string;
6
6
  }
7
- type UndoEntryType = 'visual-control' | 'default-props' | 'sequence-props' | 'effect-props' | 'keyframe-add' | 'keyframe-delete' | 'add-effect' | 'delete-effect' | 'duplicate-effect' | 'paste-effects' | 'reorder-effect' | 'reorder-sequence' | 'delete-jsx-node' | 'duplicate-jsx-node' | 'split-jsx-sequence' | 'insert-jsx-element' | 'delete-composition' | 'rename-composition' | 'update-composition-metadata' | 'new-composition' | 'duplicate-composition' | 'move-composition-to-folder' | 'new-folder' | 'delete-folder' | 'rename-folder';
7
+ type UndoEntryType = 'visual-control' | 'default-props' | 'sequence-props' | 'effect-props' | 'keyframe-add' | 'keyframe-delete' | 'add-effect' | 'delete-effect' | 'duplicate-effect' | 'paste-effects' | 'reorder-effect' | 'reorder-sequence' | 'delete-jsx-node' | 'duplicate-jsx-node' | 'split-jsx-sequence' | 'split-video-from-audio' | 'insert-jsx-element' | 'delete-composition' | 'rename-composition' | 'update-composition-metadata' | 'new-composition' | 'duplicate-composition' | 'move-composition-to-folder' | 'new-folder' | 'delete-folder' | 'rename-folder';
8
8
  type UndoEntrySnapshot = {
9
9
  filePath: string;
10
10
  oldContents: string | null;
@@ -21,57 +21,8 @@ type UndoEntry = {
21
21
  description: UndoEntryDescription;
22
22
  /** When true, undo/redo file restores call `suppressBundlerUpdateForFile` (skip HMR refresh). */
23
23
  suppressHmrOnFileRestore: boolean;
24
- } & ({
25
- entryType: 'visual-control';
26
- } | {
27
- entryType: 'default-props';
28
- } | {
29
- entryType: 'sequence-props';
30
- } | {
31
- entryType: 'effect-props';
32
- } | {
33
- entryType: 'keyframe-add';
34
- } | {
35
- entryType: 'keyframe-delete';
36
- } | {
37
- entryType: 'add-effect';
38
- } | {
39
- entryType: 'delete-effect';
40
- } | {
41
- entryType: 'duplicate-effect';
42
- } | {
43
- entryType: 'paste-effects';
44
- } | {
45
- entryType: 'reorder-effect';
46
- } | {
47
- entryType: 'reorder-sequence';
48
- } | {
49
- entryType: 'delete-jsx-node';
50
- } | {
51
- entryType: 'duplicate-jsx-node';
52
- } | {
53
- entryType: 'split-jsx-sequence';
54
- } | {
55
- entryType: 'insert-jsx-element';
56
- } | {
57
- entryType: 'delete-composition';
58
- } | {
59
- entryType: 'rename-composition';
60
- } | {
61
- entryType: 'update-composition-metadata';
62
- } | {
63
- entryType: 'new-composition';
64
- } | {
65
- entryType: 'duplicate-composition';
66
- } | {
67
- entryType: 'move-composition-to-folder';
68
- } | {
69
- entryType: 'new-folder';
70
- } | {
71
- entryType: 'delete-folder';
72
- } | {
73
- entryType: 'rename-folder';
74
- });
24
+ entryType: UndoEntryType;
25
+ };
75
26
  export declare function pushToUndoStack({ filePath, oldContents, newContents, logLevel, remotionRoot, logLine, description, entryType, suppressHmrOnFileRestore, nodePathRemappings }: {
76
27
  filePath: string;
77
28
  oldContents: string;
@@ -4,8 +4,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.isUpdateAvailableWithTimeout = exports.getRemotionVersion = exports.isUpdateAvailable = void 0;
7
- const node_fs_1 = require("node:fs");
8
- const node_path_1 = __importDefault(require("node:path"));
9
7
  const semver_1 = __importDefault(require("semver"));
10
8
  const detect_outdated_remotion_skills_1 = require("../detect-outdated-remotion-skills");
11
9
  const get_latest_remotion_version_1 = require("../get-latest-remotion-version");
@@ -17,12 +15,14 @@ const getSkillsUpdateInfo = ({ remotionRoot, currentVersion, }) => {
17
15
  }).project;
18
16
  return {
19
17
  skillsUpdateAvailable: projectSkills.type === 'outdated',
20
- remotionUpgradeSkillAvailable: (0, node_fs_1.existsSync)(node_path_1.default.join(remotionRoot, '.agents', 'skills', 'remotion-upgrade', 'SKILL.md')),
21
18
  };
22
19
  };
23
20
  const isUpdateAvailable = async ({ remotionRoot, currentVersion, logLevel, getLatestVersion, }) => {
24
21
  const latest = await (getLatestVersion !== null && getLatestVersion !== void 0 ? getLatestVersion : get_latest_remotion_version_1.getLatestRemotionVersion)();
25
- const skillsUpdateInfo = getSkillsUpdateInfo({ remotionRoot, currentVersion });
22
+ const skillsUpdateInfo = getSkillsUpdateInfo({
23
+ remotionRoot,
24
+ currentVersion,
25
+ });
26
26
  const pkgManager = (0, get_package_manager_1.getPackageManager)({
27
27
  remotionRoot,
28
28
  packageManager: undefined,
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "url": "https://github.com/remotion-dev/remotion/tree/main/packages/studio-server"
4
4
  },
5
5
  "name": "@remotion/studio-server",
6
- "version": "4.0.512",
6
+ "version": "4.0.514",
7
7
  "description": "Run a Remotion Studio with a server backend",
8
8
  "main": "dist",
9
9
  "scripts": {
@@ -23,7 +23,7 @@
23
23
  "access": "public"
24
24
  },
25
25
  "dependencies": {
26
- "@remotion/studio-protocol": "4.0.512",
26
+ "@remotion/studio-protocol": "4.0.514",
27
27
  "@babel/types": "7.24.0",
28
28
  "@babel/parser": "7.24.1",
29
29
  "@svgr/core": "8.1.0",
@@ -32,12 +32,12 @@
32
32
  "semver": "7.5.3",
33
33
  "zod": "4.4.3",
34
34
  "prettier": "3.8.1",
35
- "remotion": "4.0.512",
35
+ "remotion": "4.0.514",
36
36
  "recast": "0.23.11",
37
- "@remotion/bundler": "4.0.512",
38
- "@remotion/renderer": "4.0.512",
39
- "@remotion/studio-codemods": "4.0.512",
40
- "@remotion/studio-shared": "4.0.512",
37
+ "@remotion/bundler": "4.0.514",
38
+ "@remotion/renderer": "4.0.514",
39
+ "@remotion/studio-codemods": "4.0.514",
40
+ "@remotion/studio-shared": "4.0.514",
41
41
  "memfs": "3.4.3",
42
42
  "open": "8.4.2"
43
43
  },
@@ -45,7 +45,7 @@
45
45
  "ast-types": "0.16.1",
46
46
  "react": "19.2.3",
47
47
  "@types/semver": "7.5.3",
48
- "@remotion/eslint-config-internal": "4.0.512",
48
+ "@remotion/eslint-config-internal": "4.0.514",
49
49
  "eslint": "9.19.0",
50
50
  "@types/node": "20.12.14",
51
51
  "@typescript/native-preview": "7.0.0-dev.20260217.1"