@remotion/studio-server 4.0.471 → 4.0.472

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 (31) hide show
  1. package/dist/codemods/add-effect.d.ts +11 -0
  2. package/dist/codemods/add-effect.js +14 -52
  3. package/dist/codemods/format-file-content.js +1 -1
  4. package/dist/codemods/parse-ast.js +4 -1
  5. package/dist/codemods/paste-effects.d.ts +15 -0
  6. package/dist/codemods/paste-effects.js +234 -0
  7. package/dist/codemods/recast-mods.js +178 -31
  8. package/dist/codemods/update-keyframes/ensure-imports-and-frame-hook.d.ts +1 -1
  9. package/dist/codemods/update-keyframes/ensure-imports-and-frame-hook.js +7 -55
  10. package/dist/codemods/update-keyframes/update-keyframes.d.ts +11 -6
  11. package/dist/codemods/update-keyframes/update-keyframes.js +127 -16
  12. package/dist/helpers/get-ast-node-path.js +6 -1
  13. package/dist/helpers/import-agnostic-node-path.d.ts +10 -0
  14. package/dist/helpers/import-agnostic-node-path.js +154 -0
  15. package/dist/helpers/imports.d.ts +16 -0
  16. package/dist/helpers/imports.js +145 -0
  17. package/dist/helpers/resolve-composition-component.js +114 -51
  18. package/dist/preview-server/api-routes.js +2 -0
  19. package/dist/preview-server/routes/add-effect-keyframe.js +2 -0
  20. package/dist/preview-server/routes/add-sequence-keyframe.js +1 -0
  21. package/dist/preview-server/routes/apply-codemod.js +18 -0
  22. package/dist/preview-server/routes/can-update-effect-props.d.ts +3 -2
  23. package/dist/preview-server/routes/can-update-effect-props.js +75 -6
  24. package/dist/preview-server/routes/can-update-sequence-props.js +33 -30
  25. package/dist/preview-server/routes/delete-keyframes.js +1 -0
  26. package/dist/preview-server/routes/insert-jsx-element.js +23 -0
  27. package/dist/preview-server/routes/paste-effects.d.ts +3 -0
  28. package/dist/preview-server/routes/paste-effects.js +78 -0
  29. package/dist/preview-server/routes/save-effect-props.js +1 -0
  30. package/dist/preview-server/undo-stack.d.ts +7 -1
  31. package/package.json +6 -6
@@ -0,0 +1,3 @@
1
+ import type { PasteEffectsRequest, PasteEffectsResponse } from '@remotion/studio-shared';
2
+ import type { ApiHandler } from '../api-types';
3
+ export declare const pasteEffectsHandler: ApiHandler<PasteEffectsRequest, PasteEffectsResponse>;
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pasteEffectsHandler = void 0;
4
+ const node_fs_1 = require("node:fs");
5
+ const renderer_1 = require("@remotion/renderer");
6
+ const paste_effects_1 = require("../../codemods/paste-effects");
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 formatting_1 = require("./log-updates/formatting");
12
+ const log_update_1 = require("./log-updates/log-update");
13
+ const getPastedEffectDescription = (effectLabels) => {
14
+ if (effectLabels.length === 1) {
15
+ return effectLabels[0];
16
+ }
17
+ return `${effectLabels.length} effects`;
18
+ };
19
+ const pasteEffectsHandler = async ({ input: { targetFileName, targetSequenceNodePath, type, effects, clientId }, remotionRoot, logLevel, }) => {
20
+ try {
21
+ if (effects.length === 0 && type !== 'effects-replacing') {
22
+ throw new Error('No effects were specified for pasting');
23
+ }
24
+ renderer_1.RenderInternals.Log.trace({ indent: false, logLevel }, `[paste-effects] Received request to paste ${effects.length} effect${effects.length === 1 ? '' : 's'} into fileName="${targetFileName}"`);
25
+ const { absolutePath, fileRelativeToRoot } = (0, resolve_file_inside_project_1.resolveFileInsideProject)({
26
+ remotionRoot,
27
+ fileName: targetFileName,
28
+ action: 'modify',
29
+ });
30
+ const fileContents = (0, node_fs_1.readFileSync)(absolutePath, 'utf-8');
31
+ const { output, formatted, effectLabels, logLine } = await (0, paste_effects_1.pasteEffects)({
32
+ input: fileContents,
33
+ targetFileName,
34
+ targetSequenceNodePath: targetSequenceNodePath.nodePath,
35
+ type,
36
+ effects,
37
+ });
38
+ const effectDescription = getPastedEffectDescription(effectLabels);
39
+ (0, undo_stack_1.pushToUndoStack)({
40
+ filePath: absolutePath,
41
+ oldContents: fileContents,
42
+ newContents: null,
43
+ logLevel,
44
+ remotionRoot,
45
+ logLine,
46
+ description: {
47
+ undoMessage: `↩️ Pasting of ${effectDescription}`,
48
+ redoMessage: `↪️ Pasting of ${effectDescription}`,
49
+ },
50
+ entryType: 'paste-effects',
51
+ suppressHmrOnFileRestore: false,
52
+ });
53
+ (0, undo_stack_1.suppressUndoStackInvalidation)(absolutePath);
54
+ (0, file_watcher_1.writeFileAndNotifyFileWatchers)(absolutePath, output, clientId);
55
+ const locationLabel = (0, format_log_file_location_1.formatLogFileLocation)({
56
+ remotionRoot,
57
+ absolutePath,
58
+ line: logLine,
59
+ });
60
+ renderer_1.RenderInternals.Log.info({ indent: false, logLevel }, `${renderer_1.RenderInternals.chalk.blueBright(`${locationLabel}`)} Pasted ${(0, formatting_1.attrName)(effectDescription)}`);
61
+ if (!formatted) {
62
+ (0, log_update_1.warnAboutPrettierOnce)(logLevel);
63
+ }
64
+ renderer_1.RenderInternals.Log.verbose({ indent: false, logLevel }, `[paste-effects] Wrote ${fileRelativeToRoot}${formatted ? ' (formatted)' : ''}`);
65
+ (0, undo_stack_1.printUndoHint)(logLevel);
66
+ return {
67
+ success: true,
68
+ };
69
+ }
70
+ catch (err) {
71
+ return {
72
+ success: false,
73
+ reason: err.message,
74
+ stack: err.stack,
75
+ };
76
+ }
77
+ };
78
+ exports.pasteEffectsHandler = pasteEffectsHandler;
@@ -103,6 +103,7 @@ const saveEffectPropsHandler = ({ input: { fileName, sequenceNodePath, effectInd
103
103
  };
104
104
  }
105
105
  return (0, can_update_effect_props_1.computeEffectPropStatus)({
106
+ ast,
106
107
  jsx,
107
108
  effectIndex,
108
109
  keys: (0, studio_shared_1.getAllSchemaKeys)(schema),
@@ -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-delete' | 'add-effect' | 'delete-effect' | 'reorder-effect' | 'delete-jsx-node' | 'duplicate-jsx-node' | 'insert-jsx-element' | 'delete-composition' | 'rename-composition' | 'duplicate-composition';
6
+ type UndoEntryType = 'visual-control' | 'default-props' | 'sequence-props' | 'effect-props' | 'keyframe-delete' | 'add-effect' | 'delete-effect' | 'paste-effects' | 'reorder-effect' | 'delete-jsx-node' | 'duplicate-jsx-node' | 'insert-jsx-element' | 'delete-composition' | 'rename-composition' | 'duplicate-composition' | 'delete-folder' | 'rename-folder';
7
7
  type UndoEntrySnapshot = {
8
8
  filePath: string;
9
9
  oldContents: string;
@@ -33,6 +33,8 @@ type UndoEntry = {
33
33
  entryType: 'add-effect';
34
34
  } | {
35
35
  entryType: 'delete-effect';
36
+ } | {
37
+ entryType: 'paste-effects';
36
38
  } | {
37
39
  entryType: 'reorder-effect';
38
40
  } | {
@@ -47,6 +49,10 @@ type UndoEntry = {
47
49
  entryType: 'rename-composition';
48
50
  } | {
49
51
  entryType: 'duplicate-composition';
52
+ } | {
53
+ entryType: 'delete-folder';
54
+ } | {
55
+ entryType: 'rename-folder';
50
56
  });
51
57
  export declare function pushToUndoStack({ filePath, oldContents, newContents, logLevel, remotionRoot, logLine, description, entryType, suppressHmrOnFileRestore }: {
52
58
  filePath: string;
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.471",
6
+ "version": "4.0.472",
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.471",
30
+ "remotion": "4.0.472",
31
31
  "recast": "0.23.11",
32
- "@remotion/bundler": "4.0.471",
33
- "@remotion/renderer": "4.0.471",
34
- "@remotion/studio-shared": "4.0.471",
32
+ "@remotion/bundler": "4.0.472",
33
+ "@remotion/renderer": "4.0.472",
34
+ "@remotion/studio-shared": "4.0.472",
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.471",
42
+ "@remotion/eslint-config-internal": "4.0.472",
43
43
  "eslint": "9.19.0",
44
44
  "@types/node": "20.12.14",
45
45
  "@typescript/native-preview": "7.0.0-dev.20260217.1"