@remotion/studio-server 4.0.484 → 4.0.486
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.
- package/dist/codemods/duplicate-composition.js +8 -0
- package/dist/codemods/recast-mods.js +246 -5
- package/dist/codemods/split-jsx-sequence.d.ts +14 -0
- package/dist/codemods/split-jsx-sequence.js +345 -0
- package/dist/codemods/update-sequence-props/update-sequence-props.d.ts +3 -1
- package/dist/codemods/update-sequence-props/update-sequence-props.js +406 -9
- package/dist/helpers/import-agnostic-node-path.js +30 -4
- package/dist/helpers/resolve-composition-component.d.ts +1 -0
- package/dist/helpers/resolve-composition-component.js +206 -9
- package/dist/preview-server/api-routes.js +2 -0
- package/dist/preview-server/routes/add-effect-keyframe.js +2 -2
- package/dist/preview-server/routes/add-effect.js +56 -53
- package/dist/preview-server/routes/add-keyframes.js +2 -2
- package/dist/preview-server/routes/add-sequence-keyframe.js +2 -2
- package/dist/preview-server/routes/apply-codemod.js +123 -101
- package/dist/preview-server/routes/apply-visual-control-change.js +83 -80
- package/dist/preview-server/routes/can-update-sequence-props.d.ts +13 -1
- package/dist/preview-server/routes/can-update-sequence-props.js +101 -7
- package/dist/preview-server/routes/delete-effect.js +83 -80
- package/dist/preview-server/routes/delete-jsx-node.js +74 -71
- package/dist/preview-server/routes/delete-keyframes.js +2 -2
- package/dist/preview-server/routes/duplicate-effect.js +77 -74
- package/dist/preview-server/routes/duplicate-jsx-node.js +53 -50
- package/dist/preview-server/routes/insert-element.js +2 -2
- package/dist/preview-server/routes/insert-jsx-element.js +53 -4
- package/dist/preview-server/routes/move-keyframes.js +2 -2
- package/dist/preview-server/routes/paste-effects.js +59 -56
- package/dist/preview-server/routes/reorder-effect.js +55 -52
- package/dist/preview-server/routes/reorder-sequence.js +55 -52
- package/dist/preview-server/routes/save-effect-props.js +2 -2
- package/dist/preview-server/routes/save-sequence-props.d.ts +3 -1
- package/dist/preview-server/routes/save-sequence-props.js +208 -24
- package/dist/preview-server/routes/source-file-write-queue.d.ts +1 -0
- package/dist/preview-server/routes/source-file-write-queue.js +11 -0
- package/dist/preview-server/routes/split-jsx-sequence.d.ts +3 -0
- package/dist/preview-server/routes/split-jsx-sequence.js +66 -0
- package/dist/preview-server/routes/update-default-props.js +58 -55
- package/dist/preview-server/routes/update-effect-keyframe-settings.js +2 -2
- package/dist/preview-server/routes/update-sequence-keyframe-settings.js +2 -2
- package/dist/preview-server/undo-stack.d.ts +7 -1
- package/package.json +6 -6
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.insertJsxElementHandler = void 0;
|
|
7
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
4
8
|
const renderer_1 = require("@remotion/renderer");
|
|
5
9
|
const studio_shared_1 = require("@remotion/studio-shared");
|
|
6
10
|
const file_watcher_1 = require("../../file-watcher");
|
|
@@ -8,7 +12,7 @@ const resolve_composition_component_1 = require("../../helpers/resolve-compositi
|
|
|
8
12
|
const format_log_file_location_1 = require("../format-log-file-location");
|
|
9
13
|
const undo_stack_1 = require("../undo-stack");
|
|
10
14
|
const log_update_1 = require("./log-updates/log-update");
|
|
11
|
-
const
|
|
15
|
+
const source_file_write_queue_1 = require("./source-file-write-queue");
|
|
12
16
|
const validateDimension = (name, value) => {
|
|
13
17
|
if (!Number.isFinite(value) || value < 1) {
|
|
14
18
|
throw new Error(`${name} must be a positive number`);
|
|
@@ -22,7 +26,27 @@ const validatePosition = (position) => {
|
|
|
22
26
|
throw new Error('Position must be finite');
|
|
23
27
|
}
|
|
24
28
|
};
|
|
25
|
-
const
|
|
29
|
+
const isInsideRemotionRoot = ({ fileName, remotionRoot, }) => {
|
|
30
|
+
const relativePath = node_path_1.default.relative(remotionRoot, fileName);
|
|
31
|
+
return !relativePath.startsWith('..') && !node_path_1.default.isAbsolute(relativePath);
|
|
32
|
+
};
|
|
33
|
+
const hasParentDirectorySegment = (fileName) => {
|
|
34
|
+
return fileName.split('/').includes('..');
|
|
35
|
+
};
|
|
36
|
+
const validateCompositionFile = ({ compositionFile, remotionRoot, }) => {
|
|
37
|
+
if (!compositionFile ||
|
|
38
|
+
compositionFile.includes('\0') ||
|
|
39
|
+
compositionFile.includes('\\') ||
|
|
40
|
+
compositionFile.startsWith('/') ||
|
|
41
|
+
hasParentDirectorySegment(compositionFile)) {
|
|
42
|
+
throw new Error('Unsupported composition file');
|
|
43
|
+
}
|
|
44
|
+
const resolved = node_path_1.default.resolve(remotionRoot, compositionFile);
|
|
45
|
+
if (!isInsideRemotionRoot({ fileName: resolved, remotionRoot })) {
|
|
46
|
+
throw new Error('Unsupported composition file');
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const validateElement = (element, remotionRoot) => {
|
|
26
50
|
validatePosition(element.position);
|
|
27
51
|
if (element.type === 'solid') {
|
|
28
52
|
validateDimension('width', element.width);
|
|
@@ -59,6 +83,28 @@ const validateElement = (element) => {
|
|
|
59
83
|
}
|
|
60
84
|
return;
|
|
61
85
|
}
|
|
86
|
+
if (element.type === 'composition') {
|
|
87
|
+
if (typeof element.compositionId !== 'string' || !element.compositionId) {
|
|
88
|
+
throw new Error('Unsupported composition ID');
|
|
89
|
+
}
|
|
90
|
+
if (typeof element.compositionFile !== 'string') {
|
|
91
|
+
throw new Error('Unsupported composition file');
|
|
92
|
+
}
|
|
93
|
+
validateCompositionFile({
|
|
94
|
+
compositionFile: element.compositionFile,
|
|
95
|
+
remotionRoot,
|
|
96
|
+
});
|
|
97
|
+
validateDimension('width', element.width);
|
|
98
|
+
validateDimension('height', element.height);
|
|
99
|
+
validateDimension('durationInFrames', element.durationInFrames);
|
|
100
|
+
const parsedProps = JSON.parse(element.serializedResolvedPropsWithCustomSchema);
|
|
101
|
+
if (typeof parsedProps !== 'object' ||
|
|
102
|
+
parsedProps === null ||
|
|
103
|
+
Array.isArray(parsedProps)) {
|
|
104
|
+
throw new Error('Resolved composition props must be an object');
|
|
105
|
+
}
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
62
108
|
throw new Error('Unsupported element type');
|
|
63
109
|
};
|
|
64
110
|
const getElementLabel = (element) => {
|
|
@@ -85,11 +131,14 @@ const getElementLabel = (element) => {
|
|
|
85
131
|
if (element.type === 'component') {
|
|
86
132
|
return `<${element.componentName}>`;
|
|
87
133
|
}
|
|
134
|
+
if (element.type === 'composition') {
|
|
135
|
+
return `composition "${element.compositionId}"`;
|
|
136
|
+
}
|
|
88
137
|
throw new Error('Unsupported element type');
|
|
89
138
|
};
|
|
90
|
-
const insertJsxElementHandler = ({ input: { compositionFile, compositionId, element }, remotionRoot, logLevel, }) => (0,
|
|
139
|
+
const insertJsxElementHandler = ({ input: { compositionFile, compositionId, element }, remotionRoot, logLevel, }) => (0, source_file_write_queue_1.withSourceFileWriteQueue)(async () => {
|
|
91
140
|
try {
|
|
92
|
-
validateElement(element);
|
|
141
|
+
validateElement(element, remotionRoot);
|
|
93
142
|
const elementLabel = getElementLabel(element);
|
|
94
143
|
renderer_1.RenderInternals.Log.trace({ indent: false, logLevel }, `[insert-jsx-element] Received request for compositionFile="${compositionFile}" compositionId="${compositionId}" element="${element.type}"`);
|
|
95
144
|
const { fileName, source, oldContents, output, formatted, logLine } = await (0, resolve_composition_component_1.insertJsxElementIntoComposition)({
|
|
@@ -10,7 +10,7 @@ const undo_stack_1 = require("../undo-stack");
|
|
|
10
10
|
const watch_ignore_next_change_1 = require("../watch-ignore-next-change");
|
|
11
11
|
const log_effect_update_1 = require("./log-updates/log-effect-update");
|
|
12
12
|
const log_update_1 = require("./log-updates/log-update");
|
|
13
|
-
const
|
|
13
|
+
const source_file_write_queue_1 = require("./source-file-write-queue");
|
|
14
14
|
const groupBy = (items, getKey) => {
|
|
15
15
|
var _a;
|
|
16
16
|
const groups = new Map();
|
|
@@ -228,7 +228,7 @@ const moveKeyframes = async ({ sequenceKeyframes, effectKeyframes, clientId, rem
|
|
|
228
228
|
(0, undo_stack_1.printUndoHint)(logLevel);
|
|
229
229
|
};
|
|
230
230
|
exports.moveKeyframes = moveKeyframes;
|
|
231
|
-
const moveKeyframesHandler = ({ input: { sequenceKeyframes, effectKeyframes, clientId }, remotionRoot, logLevel, }) => (0,
|
|
231
|
+
const moveKeyframesHandler = ({ input: { sequenceKeyframes, effectKeyframes, clientId }, remotionRoot, logLevel, }) => (0, source_file_write_queue_1.withSourceFileWriteQueue)(async () => {
|
|
232
232
|
renderer_1.RenderInternals.Log.trace({ indent: false, logLevel }, `[move-keyframes] Received request to move ${sequenceKeyframes.length + effectKeyframes.length} keyframe(s)`);
|
|
233
233
|
await (0, exports.moveKeyframes)({
|
|
234
234
|
sequenceKeyframes,
|
|
@@ -10,69 +10,72 @@ 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 source_file_write_queue_1 = require("./source-file-write-queue");
|
|
13
14
|
const getPastedEffectDescription = (effectLabels) => {
|
|
14
15
|
if (effectLabels.length === 1) {
|
|
15
16
|
return effectLabels[0];
|
|
16
17
|
}
|
|
17
18
|
return `${effectLabels.length} effects`;
|
|
18
19
|
};
|
|
19
|
-
const pasteEffectsHandler =
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
const pasteEffectsHandler = ({ input: { targetFileName, targetSequenceNodePath, type, effects, clientId }, remotionRoot, logLevel, }) => {
|
|
21
|
+
return (0, source_file_write_queue_1.withSourceFileWriteQueue)(async () => {
|
|
22
|
+
try {
|
|
23
|
+
if (effects.length === 0 && type !== 'effects-replacing') {
|
|
24
|
+
throw new Error('No effects were specified for pasting');
|
|
25
|
+
}
|
|
26
|
+
renderer_1.RenderInternals.Log.trace({ indent: false, logLevel }, `[paste-effects] Received request to paste ${effects.length} effect${effects.length === 1 ? '' : 's'} into fileName="${targetFileName}"`);
|
|
27
|
+
const { absolutePath, fileRelativeToRoot } = (0, resolve_file_inside_project_1.resolveFileInsideProject)({
|
|
28
|
+
remotionRoot,
|
|
29
|
+
fileName: targetFileName,
|
|
30
|
+
action: 'modify',
|
|
31
|
+
});
|
|
32
|
+
const fileContents = (0, node_fs_1.readFileSync)(absolutePath, 'utf-8');
|
|
33
|
+
const { output, formatted, effectLabels, logLine } = await (0, paste_effects_1.pasteEffects)({
|
|
34
|
+
input: fileContents,
|
|
35
|
+
targetFileName,
|
|
36
|
+
targetSequenceNodePath: targetSequenceNodePath.nodePath,
|
|
37
|
+
type,
|
|
38
|
+
effects,
|
|
39
|
+
});
|
|
40
|
+
const effectDescription = getPastedEffectDescription(effectLabels);
|
|
41
|
+
(0, undo_stack_1.pushToUndoStack)({
|
|
42
|
+
filePath: absolutePath,
|
|
43
|
+
oldContents: fileContents,
|
|
44
|
+
newContents: null,
|
|
45
|
+
logLevel,
|
|
46
|
+
remotionRoot,
|
|
47
|
+
logLine,
|
|
48
|
+
description: {
|
|
49
|
+
undoMessage: `↩️ Pasting of ${effectDescription}`,
|
|
50
|
+
redoMessage: `↪️ Pasting of ${effectDescription}`,
|
|
51
|
+
},
|
|
52
|
+
entryType: 'paste-effects',
|
|
53
|
+
suppressHmrOnFileRestore: false,
|
|
54
|
+
});
|
|
55
|
+
(0, undo_stack_1.suppressUndoStackInvalidation)(absolutePath);
|
|
56
|
+
(0, file_watcher_1.writeFileAndNotifyFileWatchers)(absolutePath, output, clientId);
|
|
57
|
+
const locationLabel = (0, format_log_file_location_1.formatLogFileLocation)({
|
|
58
|
+
remotionRoot,
|
|
59
|
+
absolutePath,
|
|
60
|
+
line: logLine,
|
|
61
|
+
});
|
|
62
|
+
renderer_1.RenderInternals.Log.info({ indent: false, logLevel }, `${renderer_1.RenderInternals.chalk.blueBright(`${locationLabel}`)} Pasted ${(0, formatting_1.attrName)(effectDescription)}`);
|
|
63
|
+
if (!formatted) {
|
|
64
|
+
(0, log_update_1.warnAboutPrettierOnce)(logLevel);
|
|
65
|
+
}
|
|
66
|
+
renderer_1.RenderInternals.Log.verbose({ indent: false, logLevel }, `[paste-effects] Wrote ${fileRelativeToRoot}${formatted ? ' (formatted)' : ''}`);
|
|
67
|
+
(0, undo_stack_1.printUndoHint)(logLevel);
|
|
68
|
+
return {
|
|
69
|
+
success: true,
|
|
70
|
+
};
|
|
23
71
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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);
|
|
72
|
+
catch (err) {
|
|
73
|
+
return {
|
|
74
|
+
success: false,
|
|
75
|
+
reason: err.message,
|
|
76
|
+
stack: err.stack,
|
|
77
|
+
};
|
|
63
78
|
}
|
|
64
|
-
|
|
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
|
-
}
|
|
79
|
+
});
|
|
77
80
|
};
|
|
78
81
|
exports.pasteEffectsHandler = pasteEffectsHandler;
|
|
@@ -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
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
(0,
|
|
13
|
+
const source_file_write_queue_1 = require("./source-file-write-queue");
|
|
14
|
+
const reorderEffectHandler = ({ input: { fileName, sequenceNodePath, fromIndex, toIndex, 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-effect] Received request for fileName="${fileName}" fromIndex=${fromIndex} toIndex=${toIndex}`);
|
|
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, effectLabel, logLine } = await (0, reorder_effect_1.reorderEffect)({
|
|
25
|
+
input: fileContents,
|
|
26
|
+
sequenceNodePath: sequenceNodePath.nodePath,
|
|
27
|
+
fromIndex,
|
|
28
|
+
toIndex,
|
|
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 ${effectLabel}`,
|
|
39
|
+
redoMessage: `↪️ Reordering of ${effectLabel}`,
|
|
40
|
+
},
|
|
41
|
+
entryType: 'reorder-effect',
|
|
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)(effectLabel)}`);
|
|
52
|
+
if (!formatted) {
|
|
53
|
+
(0, log_update_1.warnAboutPrettierOnce)(logLevel);
|
|
54
|
+
}
|
|
55
|
+
renderer_1.RenderInternals.Log.verbose({ indent: false, logLevel }, `[reorder-effect] Wrote ${fileRelativeToRoot}${formatted ? ' (formatted)' : ''}`);
|
|
56
|
+
(0, undo_stack_1.printUndoHint)(logLevel);
|
|
57
|
+
return {
|
|
58
|
+
success: true,
|
|
59
|
+
};
|
|
52
60
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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.reorderEffectHandler = reorderEffectHandler;
|
|
@@ -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
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
(0,
|
|
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
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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
|
|
19
|
-
const saveEffectPropsHandler = ({ input, remotionRoot, logLevel }) => (0,
|
|
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,10 +11,12 @@ type ResolvedSequencePropEdit = {
|
|
|
11
11
|
defaultValue: unknown | null;
|
|
12
12
|
defaultValueString: string | null;
|
|
13
13
|
schema: SaveSequencePropEdit['schema'];
|
|
14
|
+
sourceEdit: SaveSequencePropEdit['sourceEdit'];
|
|
14
15
|
};
|
|
15
|
-
export declare const convertSequencePropEditToCodemodChange: (edit: Pick<ResolvedSequencePropEdit, "defaultValue" | "key" | "nodePath" | "schema" | "value">) => SequencePropsNodeUpdate;
|
|
16
|
+
export declare const convertSequencePropEditToCodemodChange: (edit: Pick<ResolvedSequencePropEdit, "defaultValue" | "key" | "nodePath" | "schema" | "sourceEdit" | "value">) => SequencePropsNodeUpdate;
|
|
16
17
|
export declare const shouldSuppressHmrForSequencePropEdits: (edits: readonly {
|
|
17
18
|
key: string;
|
|
19
|
+
sourceEdit?: import("@remotion/studio-shared").SaveSequencePropSourceEdit | null | undefined;
|
|
18
20
|
}[]) => boolean;
|
|
19
21
|
export declare const saveSequencePropsHandler: ApiHandler<SaveSequencePropsRequest, SaveSequencePropsResponse>;
|
|
20
22
|
export {};
|