@remotion/studio-server 4.0.483 → 4.0.485

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 (36) hide show
  1. package/dist/codemods/recast-mods.js +37 -0
  2. package/dist/codemods/split-jsx-sequence.d.ts +14 -0
  3. package/dist/codemods/split-jsx-sequence.js +345 -0
  4. package/dist/codemods/update-sequence-props/update-sequence-props.d.ts +1 -1
  5. package/dist/codemods/update-sequence-props/update-sequence-props.js +62 -7
  6. package/dist/preview-server/api-routes.js +2 -0
  7. package/dist/preview-server/routes/add-effect-keyframe.js +2 -2
  8. package/dist/preview-server/routes/add-effect.js +56 -53
  9. package/dist/preview-server/routes/add-keyframes.js +2 -2
  10. package/dist/preview-server/routes/add-sequence-keyframe.js +2 -2
  11. package/dist/preview-server/routes/apply-codemod.js +104 -101
  12. package/dist/preview-server/routes/apply-visual-control-change.js +83 -80
  13. package/dist/preview-server/routes/can-update-sequence-props.d.ts +13 -1
  14. package/dist/preview-server/routes/can-update-sequence-props.js +101 -7
  15. package/dist/preview-server/routes/delete-effect.js +83 -80
  16. package/dist/preview-server/routes/delete-jsx-node.js +74 -71
  17. package/dist/preview-server/routes/delete-keyframes.js +2 -2
  18. package/dist/preview-server/routes/duplicate-effect.js +77 -74
  19. package/dist/preview-server/routes/duplicate-jsx-node.js +53 -50
  20. package/dist/preview-server/routes/insert-element.js +2 -2
  21. package/dist/preview-server/routes/insert-jsx-element.js +2 -2
  22. package/dist/preview-server/routes/move-keyframes.js +2 -2
  23. package/dist/preview-server/routes/paste-effects.js +59 -56
  24. package/dist/preview-server/routes/reorder-effect.js +55 -52
  25. package/dist/preview-server/routes/reorder-sequence.js +55 -52
  26. package/dist/preview-server/routes/save-effect-props.js +2 -2
  27. package/dist/preview-server/routes/save-sequence-props.js +2 -2
  28. package/dist/preview-server/routes/source-file-write-queue.d.ts +1 -0
  29. package/dist/preview-server/routes/source-file-write-queue.js +11 -0
  30. package/dist/preview-server/routes/split-jsx-sequence.d.ts +3 -0
  31. package/dist/preview-server/routes/split-jsx-sequence.js +66 -0
  32. package/dist/preview-server/routes/update-default-props.js +58 -55
  33. package/dist/preview-server/routes/update-effect-keyframe-settings.js +2 -2
  34. package/dist/preview-server/routes/update-sequence-keyframe-settings.js +2 -2
  35. package/dist/preview-server/undo-stack.d.ts +3 -1
  36. package/package.json +6 -6
@@ -10,58 +10,61 @@ const format_log_file_location_1 = require("../format-log-file-location");
10
10
  const undo_stack_1 = require("../undo-stack");
11
11
  const formatting_1 = require("./log-updates/formatting");
12
12
  const log_update_1 = require("./log-updates/log-update");
13
- const reorderSequenceHandler = async ({ input: { fileName, sourceNodePath, targetNodePath, position, clientId }, remotionRoot, logLevel, }) => {
14
- try {
15
- renderer_1.RenderInternals.Log.trace({ indent: false, logLevel }, `[reorder-sequence] Received request for fileName="${fileName}" position=${position}`);
16
- const { absolutePath, fileRelativeToRoot } = (0, resolve_file_inside_project_1.resolveFileInsideProject)({
17
- remotionRoot,
18
- fileName,
19
- action: 'modify',
20
- });
21
- const fileContents = (0, node_fs_1.readFileSync)(absolutePath, 'utf-8');
22
- const { output, formatted, sequenceLabel, logLine } = await (0, reorder_sequence_1.reorderSequence)({
23
- input: fileContents,
24
- sourceNodePath: sourceNodePath.nodePath,
25
- targetNodePath: targetNodePath.nodePath,
26
- position,
27
- });
28
- (0, undo_stack_1.pushToUndoStack)({
29
- filePath: absolutePath,
30
- oldContents: fileContents,
31
- newContents: null,
32
- logLevel,
33
- remotionRoot,
34
- logLine,
35
- description: {
36
- undoMessage: `↩️ Reordering of ${sequenceLabel}`,
37
- redoMessage: `↪️ Reordering of ${sequenceLabel}`,
38
- },
39
- entryType: 'reorder-sequence',
40
- suppressHmrOnFileRestore: false,
41
- });
42
- (0, undo_stack_1.suppressUndoStackInvalidation)(absolutePath);
43
- (0, file_watcher_1.writeFileAndNotifyFileWatchers)(absolutePath, output, clientId);
44
- const locationLabel = (0, format_log_file_location_1.formatLogFileLocation)({
45
- remotionRoot,
46
- absolutePath,
47
- line: logLine,
48
- });
49
- renderer_1.RenderInternals.Log.info({ indent: false, logLevel }, `${renderer_1.RenderInternals.chalk.blueBright(`${locationLabel}`)} Reordered ${(0, formatting_1.attrName)(sequenceLabel)}`);
50
- if (!formatted) {
51
- (0, log_update_1.warnAboutPrettierOnce)(logLevel);
13
+ const source_file_write_queue_1 = require("./source-file-write-queue");
14
+ const reorderSequenceHandler = ({ input: { fileName, sourceNodePath, targetNodePath, position, clientId }, remotionRoot, logLevel, }) => {
15
+ return (0, source_file_write_queue_1.withSourceFileWriteQueue)(async () => {
16
+ try {
17
+ renderer_1.RenderInternals.Log.trace({ indent: false, logLevel }, `[reorder-sequence] Received request for fileName="${fileName}" position=${position}`);
18
+ const { absolutePath, fileRelativeToRoot } = (0, resolve_file_inside_project_1.resolveFileInsideProject)({
19
+ remotionRoot,
20
+ fileName,
21
+ action: 'modify',
22
+ });
23
+ const fileContents = (0, node_fs_1.readFileSync)(absolutePath, 'utf-8');
24
+ const { output, formatted, sequenceLabel, logLine } = await (0, reorder_sequence_1.reorderSequence)({
25
+ input: fileContents,
26
+ sourceNodePath: sourceNodePath.nodePath,
27
+ targetNodePath: targetNodePath.nodePath,
28
+ position,
29
+ });
30
+ (0, undo_stack_1.pushToUndoStack)({
31
+ filePath: absolutePath,
32
+ oldContents: fileContents,
33
+ newContents: null,
34
+ logLevel,
35
+ remotionRoot,
36
+ logLine,
37
+ description: {
38
+ undoMessage: `↩️ Reordering of ${sequenceLabel}`,
39
+ redoMessage: `↪️ Reordering of ${sequenceLabel}`,
40
+ },
41
+ entryType: 'reorder-sequence',
42
+ suppressHmrOnFileRestore: false,
43
+ });
44
+ (0, undo_stack_1.suppressUndoStackInvalidation)(absolutePath);
45
+ (0, file_watcher_1.writeFileAndNotifyFileWatchers)(absolutePath, output, clientId);
46
+ const locationLabel = (0, format_log_file_location_1.formatLogFileLocation)({
47
+ remotionRoot,
48
+ absolutePath,
49
+ line: logLine,
50
+ });
51
+ renderer_1.RenderInternals.Log.info({ indent: false, logLevel }, `${renderer_1.RenderInternals.chalk.blueBright(`${locationLabel}`)} Reordered ${(0, formatting_1.attrName)(sequenceLabel)}`);
52
+ if (!formatted) {
53
+ (0, log_update_1.warnAboutPrettierOnce)(logLevel);
54
+ }
55
+ renderer_1.RenderInternals.Log.verbose({ indent: false, logLevel }, `[reorder-sequence] Wrote ${fileRelativeToRoot}${formatted ? ' (formatted)' : ''}`);
56
+ (0, undo_stack_1.printUndoHint)(logLevel);
57
+ return {
58
+ success: true,
59
+ };
52
60
  }
53
- renderer_1.RenderInternals.Log.verbose({ indent: false, logLevel }, `[reorder-sequence] Wrote ${fileRelativeToRoot}${formatted ? ' (formatted)' : ''}`);
54
- (0, undo_stack_1.printUndoHint)(logLevel);
55
- return {
56
- success: true,
57
- };
58
- }
59
- catch (err) {
60
- return {
61
- success: false,
62
- reason: err.message,
63
- stack: err.stack,
64
- };
65
- }
61
+ catch (err) {
62
+ return {
63
+ success: false,
64
+ reason: err.message,
65
+ stack: err.stack,
66
+ };
67
+ }
68
+ });
66
69
  };
67
70
  exports.reorderSequenceHandler = reorderSequenceHandler;
@@ -15,8 +15,8 @@ const can_update_sequence_props_1 = require("./can-update-sequence-props");
15
15
  const format_effect_prop_change_1 = require("./log-updates/format-effect-prop-change");
16
16
  const log_effect_update_1 = require("./log-updates/log-effect-update");
17
17
  const log_update_1 = require("./log-updates/log-update");
18
- const save_props_mutex_1 = require("./save-props-mutex");
19
- const saveEffectPropsHandler = ({ input, remotionRoot, logLevel }) => (0, save_props_mutex_1.withSavePropsLock)(async () => {
18
+ const source_file_write_queue_1 = require("./source-file-write-queue");
19
+ const saveEffectPropsHandler = ({ input, remotionRoot, logLevel }) => (0, source_file_write_queue_1.withSourceFileWriteQueue)(async () => {
20
20
  const { fileName, sequenceNodePath, effectIndex, key, defaultValue, schema, clientId, } = input;
21
21
  renderer_1.RenderInternals.Log.trace({ indent: false, logLevel }, `[save-effect-props] Received request for fileName="${fileName}" effectIndex=${effectIndex} key="${key}"`);
22
22
  const { absolutePath, fileRelativeToRoot } = (0, resolve_file_inside_project_1.resolveFileInsideProject)({
@@ -11,7 +11,7 @@ const undo_stack_1 = require("../undo-stack");
11
11
  const watch_ignore_next_change_1 = require("../watch-ignore-next-change");
12
12
  const can_update_sequence_props_1 = require("./can-update-sequence-props");
13
13
  const log_update_1 = require("./log-updates/log-update");
14
- const save_props_mutex_1 = require("./save-props-mutex");
14
+ const source_file_write_queue_1 = require("./source-file-write-queue");
15
15
  const convertSequencePropEditToCodemodChange = (edit) => {
16
16
  return {
17
17
  nodePath: edit.nodePath.nodePath,
@@ -30,7 +30,7 @@ const shouldSuppressHmrForSequencePropEdits = (edits) => {
30
30
  return edits.every((edit) => edit.key !== 'showInTimeline');
31
31
  };
32
32
  exports.shouldSuppressHmrForSequencePropEdits = shouldSuppressHmrForSequencePropEdits;
33
- const saveSequencePropsHandler = ({ input: { edits, clientId, undoLabel, redoLabel }, remotionRoot, logLevel, }) => (0, save_props_mutex_1.withSavePropsLock)(async () => {
33
+ const saveSequencePropsHandler = ({ input: { edits, clientId, undoLabel, redoLabel }, remotionRoot, logLevel, }) => (0, source_file_write_queue_1.withSourceFileWriteQueue)(async () => {
34
34
  var _a;
35
35
  if (edits.length === 0) {
36
36
  throw new Error('No sequence prop edits to save');
@@ -0,0 +1 @@
1
+ export declare const withSourceFileWriteQueue: <T>(fn: () => Promise<T>) => Promise<T>;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withSourceFileWriteQueue = void 0;
4
+ let chain = Promise.resolve();
5
+ const withSourceFileWriteQueue = (fn) => {
6
+ const run = () => fn();
7
+ const next = chain.then(run, run);
8
+ chain = next.then(() => undefined, () => undefined);
9
+ return next;
10
+ };
11
+ exports.withSourceFileWriteQueue = withSourceFileWriteQueue;
@@ -0,0 +1,3 @@
1
+ import type { SplitJsxSequenceRequest, SplitJsxSequenceResponse } from '@remotion/studio-shared';
2
+ import type { ApiHandler } from '../api-types';
3
+ export declare const splitJsxSequenceHandler: ApiHandler<SplitJsxSequenceRequest, SplitJsxSequenceResponse>;
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.splitJsxSequenceHandler = void 0;
4
+ const node_fs_1 = require("node:fs");
5
+ const renderer_1 = require("@remotion/renderer");
6
+ const split_jsx_sequence_1 = require("../../codemods/split-jsx-sequence");
7
+ const file_watcher_1 = require("../../file-watcher");
8
+ const resolve_file_inside_project_1 = require("../../helpers/resolve-file-inside-project");
9
+ const format_log_file_location_1 = require("../format-log-file-location");
10
+ const undo_stack_1 = require("../undo-stack");
11
+ const log_update_1 = require("./log-updates/log-update");
12
+ const source_file_write_queue_1 = require("./source-file-write-queue");
13
+ const splitJsxSequenceHandler = ({ input: { fileName, nodePath, splitFrame }, remotionRoot, logLevel }) => (0, source_file_write_queue_1.withSourceFileWriteQueue)(async () => {
14
+ try {
15
+ renderer_1.RenderInternals.Log.trace({ indent: false, logLevel }, `[split-jsx-sequence] Received request for fileName="${fileName}" at frame ${splitFrame}`);
16
+ const { absolutePath, fileRelativeToRoot } = (0, resolve_file_inside_project_1.resolveFileInsideProject)({
17
+ remotionRoot,
18
+ fileName,
19
+ action: 'modify',
20
+ });
21
+ const fileContents = (0, node_fs_1.readFileSync)(absolutePath, 'utf-8');
22
+ const { output, formatted, nodeLabel, logLine } = await (0, split_jsx_sequence_1.splitJsxSequence)({
23
+ input: fileContents,
24
+ nodePath,
25
+ splitFrame,
26
+ });
27
+ (0, undo_stack_1.pushToUndoStack)({
28
+ filePath: absolutePath,
29
+ oldContents: fileContents,
30
+ newContents: null,
31
+ logLevel,
32
+ remotionRoot,
33
+ logLine,
34
+ description: {
35
+ undoMessage: `↩️ Split of ${nodeLabel}`,
36
+ redoMessage: `↪️ Split of ${nodeLabel}`,
37
+ },
38
+ entryType: 'split-jsx-sequence',
39
+ suppressHmrOnFileRestore: false,
40
+ });
41
+ (0, undo_stack_1.suppressUndoStackInvalidation)(absolutePath);
42
+ (0, file_watcher_1.writeFileAndNotifyFileWatchers)(absolutePath, output, undefined);
43
+ const locationLabel = (0, format_log_file_location_1.formatLogFileLocation)({
44
+ remotionRoot,
45
+ absolutePath,
46
+ line: logLine,
47
+ });
48
+ renderer_1.RenderInternals.Log.info({ indent: false, logLevel }, `${renderer_1.RenderInternals.chalk.blueBright(`${locationLabel}`)} Split ${nodeLabel}`);
49
+ if (!formatted) {
50
+ (0, log_update_1.warnAboutPrettierOnce)(logLevel);
51
+ }
52
+ renderer_1.RenderInternals.Log.verbose({ indent: false, logLevel }, `[split-jsx-sequence] Wrote ${fileRelativeToRoot}${formatted ? ' (formatted)' : ''}`);
53
+ (0, undo_stack_1.printUndoHint)(logLevel);
54
+ return {
55
+ success: true,
56
+ };
57
+ }
58
+ catch (err) {
59
+ return {
60
+ success: false,
61
+ reason: err.message,
62
+ stack: err.stack,
63
+ };
64
+ }
65
+ });
66
+ exports.splitJsxSequenceHandler = splitJsxSequenceHandler;
@@ -11,62 +11,65 @@ const undo_stack_1 = require("../undo-stack");
11
11
  const watch_ignore_next_change_1 = require("../watch-ignore-next-change");
12
12
  const can_update_default_props_1 = require("./can-update-default-props");
13
13
  const log_update_1 = require("./log-updates/log-update");
14
- const updateDefaultPropsHandler = async ({ input: { compositionId, defaultProps, enumPaths }, remotionRoot, entryPoint, logLevel, }) => {
15
- try {
16
- renderer_1.RenderInternals.Log.trace({ indent: false, logLevel }, `[update-default-props] Received request for compositionId="${compositionId}"`);
17
- const projectInfo = await (0, project_info_1.getProjectInfo)(remotionRoot, entryPoint);
18
- if (!projectInfo.rootFile) {
19
- throw new Error('Cannot find root file in project');
14
+ const source_file_write_queue_1 = require("./source-file-write-queue");
15
+ const updateDefaultPropsHandler = ({ input: { compositionId, defaultProps, enumPaths }, remotionRoot, entryPoint, logLevel, }) => {
16
+ return (0, source_file_write_queue_1.withSourceFileWriteQueue)(async () => {
17
+ try {
18
+ renderer_1.RenderInternals.Log.trace({ indent: false, logLevel }, `[update-default-props] Received request for compositionId="${compositionId}"`);
19
+ const projectInfo = await (0, project_info_1.getProjectInfo)(remotionRoot, entryPoint);
20
+ if (!projectInfo.rootFile) {
21
+ throw new Error('Cannot find root file in project');
22
+ }
23
+ (0, can_update_default_props_1.checkIfTypeScriptFile)(projectInfo.rootFile);
24
+ const fileContents = (0, node_fs_1.readFileSync)(projectInfo.rootFile, 'utf-8');
25
+ const logLine = (0, update_default_props_1.getCompositionDefaultPropsLine)({
26
+ input: fileContents,
27
+ compositionId,
28
+ });
29
+ const { output, formatted } = await (0, update_default_props_1.updateDefaultProps)({
30
+ compositionId,
31
+ input: fileContents,
32
+ newDefaultProps: JSON.parse(defaultProps),
33
+ enumPaths,
34
+ });
35
+ (0, undo_stack_1.pushToUndoStack)({
36
+ filePath: projectInfo.rootFile,
37
+ oldContents: fileContents,
38
+ newContents: null,
39
+ logLevel,
40
+ remotionRoot,
41
+ logLine,
42
+ description: {
43
+ undoMessage: `↩️ default props update for "${compositionId}"`,
44
+ redoMessage: `↪️ default props update for "${compositionId}"`,
45
+ },
46
+ entryType: 'default-props',
47
+ suppressHmrOnFileRestore: true,
48
+ });
49
+ (0, undo_stack_1.suppressUndoStackInvalidation)(projectInfo.rootFile);
50
+ (0, watch_ignore_next_change_1.suppressBundlerUpdateForFile)(projectInfo.rootFile);
51
+ (0, file_watcher_1.writeFileAndNotifyFileWatchers)(projectInfo.rootFile, output, undefined);
52
+ const locationLabel = (0, format_log_file_location_1.formatLogFileLocation)({
53
+ remotionRoot,
54
+ absolutePath: projectInfo.rootFile,
55
+ line: logLine,
56
+ });
57
+ renderer_1.RenderInternals.Log.info({ indent: false, logLevel }, `${renderer_1.RenderInternals.chalk.blueBright(`${locationLabel}`)} Updated default props for "${compositionId}"`);
58
+ if (!formatted) {
59
+ (0, log_update_1.warnAboutPrettierOnce)(logLevel);
60
+ }
61
+ (0, undo_stack_1.printUndoHint)(logLevel);
62
+ return {
63
+ success: true,
64
+ };
20
65
  }
21
- (0, can_update_default_props_1.checkIfTypeScriptFile)(projectInfo.rootFile);
22
- const fileContents = (0, node_fs_1.readFileSync)(projectInfo.rootFile, 'utf-8');
23
- const logLine = (0, update_default_props_1.getCompositionDefaultPropsLine)({
24
- input: fileContents,
25
- compositionId,
26
- });
27
- const { output, formatted } = await (0, update_default_props_1.updateDefaultProps)({
28
- compositionId,
29
- input: fileContents,
30
- newDefaultProps: JSON.parse(defaultProps),
31
- enumPaths,
32
- });
33
- (0, undo_stack_1.pushToUndoStack)({
34
- filePath: projectInfo.rootFile,
35
- oldContents: fileContents,
36
- newContents: null,
37
- logLevel,
38
- remotionRoot,
39
- logLine,
40
- description: {
41
- undoMessage: `↩️ default props update for "${compositionId}"`,
42
- redoMessage: `↪️ default props update for "${compositionId}"`,
43
- },
44
- entryType: 'default-props',
45
- suppressHmrOnFileRestore: true,
46
- });
47
- (0, undo_stack_1.suppressUndoStackInvalidation)(projectInfo.rootFile);
48
- (0, watch_ignore_next_change_1.suppressBundlerUpdateForFile)(projectInfo.rootFile);
49
- (0, file_watcher_1.writeFileAndNotifyFileWatchers)(projectInfo.rootFile, output, undefined);
50
- const locationLabel = (0, format_log_file_location_1.formatLogFileLocation)({
51
- remotionRoot,
52
- absolutePath: projectInfo.rootFile,
53
- line: logLine,
54
- });
55
- renderer_1.RenderInternals.Log.info({ indent: false, logLevel }, `${renderer_1.RenderInternals.chalk.blueBright(`${locationLabel}`)} Updated default props for "${compositionId}"`);
56
- if (!formatted) {
57
- (0, log_update_1.warnAboutPrettierOnce)(logLevel);
66
+ catch (err) {
67
+ return {
68
+ success: false,
69
+ reason: err.message,
70
+ stack: err.stack,
71
+ };
58
72
  }
59
- (0, undo_stack_1.printUndoHint)(logLevel);
60
- return {
61
- success: true,
62
- };
63
- }
64
- catch (err) {
65
- return {
66
- success: false,
67
- reason: err.message,
68
- stack: err.stack,
69
- };
70
- }
73
+ });
71
74
  };
72
75
  exports.updateDefaultPropsHandler = updateDefaultPropsHandler;
@@ -13,8 +13,8 @@ const watch_ignore_next_change_1 = require("../watch-ignore-next-change");
13
13
  const can_update_effect_props_1 = require("./can-update-effect-props");
14
14
  const can_update_sequence_props_1 = require("./can-update-sequence-props");
15
15
  const log_effect_update_1 = require("./log-updates/log-effect-update");
16
- const save_props_mutex_1 = require("./save-props-mutex");
17
- const updateEffectKeyframeSettingsHandler = ({ input: { fileName, sequenceNodePath, effectIndex, key, settings, schema, clientId, }, remotionRoot, logLevel, }) => (0, save_props_mutex_1.withSavePropsLock)(async () => {
16
+ const source_file_write_queue_1 = require("./source-file-write-queue");
17
+ const updateEffectKeyframeSettingsHandler = ({ input: { fileName, sequenceNodePath, effectIndex, key, settings, schema, clientId, }, remotionRoot, logLevel, }) => (0, source_file_write_queue_1.withSourceFileWriteQueue)(async () => {
18
18
  renderer_1.RenderInternals.Log.trace({ indent: false, logLevel }, `[update-effect-keyframe-settings] Received request for fileName="${fileName}" effectIndex=${effectIndex} key="${key}"`);
19
19
  const { absolutePath, fileRelativeToRoot } = (0, resolve_file_inside_project_1.resolveFileInsideProject)({
20
20
  remotionRoot,
@@ -11,8 +11,8 @@ const undo_stack_1 = require("../undo-stack");
11
11
  const watch_ignore_next_change_1 = require("../watch-ignore-next-change");
12
12
  const can_update_sequence_props_1 = require("./can-update-sequence-props");
13
13
  const log_update_1 = require("./log-updates/log-update");
14
- const save_props_mutex_1 = require("./save-props-mutex");
15
- const updateSequenceKeyframeSettingsHandler = ({ input: { fileName, nodePath, key, settings, schema, clientId }, remotionRoot, logLevel, }) => (0, save_props_mutex_1.withSavePropsLock)(async () => {
14
+ const source_file_write_queue_1 = require("./source-file-write-queue");
15
+ const updateSequenceKeyframeSettingsHandler = ({ input: { fileName, nodePath, key, settings, schema, clientId }, remotionRoot, logLevel, }) => (0, source_file_write_queue_1.withSourceFileWriteQueue)(async () => {
16
16
  renderer_1.RenderInternals.Log.trace({ indent: false, logLevel }, `[update-sequence-keyframe-settings] Received request for fileName="${fileName}" key="${key}"`);
17
17
  const { absolutePath, fileRelativeToRoot } = (0, resolve_file_inside_project_1.resolveFileInsideProject)({
18
18
  remotionRoot,
@@ -3,7 +3,7 @@ export interface UndoEntryDescription {
3
3
  undoMessage: string;
4
4
  redoMessage: string;
5
5
  }
6
- 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' | 'insert-jsx-element' | 'delete-composition' | 'rename-composition' | 'new-composition' | 'duplicate-composition' | 'delete-folder' | 'rename-folder';
6
+ 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' | 'new-composition' | 'duplicate-composition' | 'delete-folder' | 'rename-folder';
7
7
  type UndoEntrySnapshot = {
8
8
  filePath: string;
9
9
  oldContents: string | null;
@@ -47,6 +47,8 @@ type UndoEntry = {
47
47
  entryType: 'delete-jsx-node';
48
48
  } | {
49
49
  entryType: 'duplicate-jsx-node';
50
+ } | {
51
+ entryType: 'split-jsx-sequence';
50
52
  } | {
51
53
  entryType: 'insert-jsx-element';
52
54
  } | {
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.483",
6
+ "version": "4.0.485",
7
7
  "description": "Run a Remotion Studio with a server backend",
8
8
  "main": "dist",
9
9
  "scripts": {
@@ -27,11 +27,11 @@
27
27
  "@babel/parser": "7.24.1",
28
28
  "semver": "7.5.3",
29
29
  "prettier": "3.8.1",
30
- "remotion": "4.0.483",
30
+ "remotion": "4.0.485",
31
31
  "recast": "0.23.11",
32
- "@remotion/bundler": "4.0.483",
33
- "@remotion/renderer": "4.0.483",
34
- "@remotion/studio-shared": "4.0.483",
32
+ "@remotion/bundler": "4.0.485",
33
+ "@remotion/renderer": "4.0.485",
34
+ "@remotion/studio-shared": "4.0.485",
35
35
  "memfs": "3.4.3",
36
36
  "open": "8.4.2"
37
37
  },
@@ -39,7 +39,7 @@
39
39
  "ast-types": "0.16.1",
40
40
  "react": "19.2.3",
41
41
  "@types/semver": "7.5.3",
42
- "@remotion/eslint-config-internal": "4.0.483",
42
+ "@remotion/eslint-config-internal": "4.0.485",
43
43
  "eslint": "9.19.0",
44
44
  "@types/node": "20.12.14",
45
45
  "@typescript/native-preview": "7.0.0-dev.20260217.1"