@remotion/studio-server 4.0.463 → 4.0.464
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/file-watcher.d.ts +3 -1
- package/dist/file-watcher.js +11 -7
- package/dist/index.d.ts +11 -1
- package/dist/index.js +3 -0
- package/dist/preview-server/routes/apply-codemod.js +1 -1
- package/dist/preview-server/routes/apply-visual-control-change.js +1 -1
- package/dist/preview-server/routes/can-update-sequence-props.js +2 -1
- package/dist/preview-server/routes/delete-jsx-node.js +1 -1
- package/dist/preview-server/routes/duplicate-jsx-node.js +1 -1
- package/dist/preview-server/routes/save-effect-props.js +2 -2
- package/dist/preview-server/routes/save-sequence-props.js +2 -2
- package/dist/preview-server/routes/update-default-props.js +1 -1
- package/dist/preview-server/sequence-props-watchers.js +15 -0
- package/dist/preview-server/undo-stack.js +2 -2
- package/package.json +6 -6
package/dist/file-watcher.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
export type FileChangeEvent = {
|
|
2
2
|
type: 'created';
|
|
3
3
|
content: string;
|
|
4
|
+
originatorClientId: string | undefined;
|
|
4
5
|
} | {
|
|
5
6
|
type: 'deleted';
|
|
6
7
|
} | {
|
|
7
8
|
type: 'changed';
|
|
8
9
|
content: string;
|
|
10
|
+
originatorClientId: string | undefined;
|
|
9
11
|
};
|
|
10
12
|
type OnChange = (event: FileChangeEvent) => void;
|
|
11
13
|
export type FileWatcherRegistry = {
|
|
@@ -23,7 +25,7 @@ export type FileWatcherRegistry = {
|
|
|
23
25
|
exists: boolean;
|
|
24
26
|
unwatch: () => void;
|
|
25
27
|
};
|
|
26
|
-
writeFileAndNotifyFileWatchers: (file: string, content: string) => void;
|
|
28
|
+
writeFileAndNotifyFileWatchers: (file: string, content: string, originatorClientId: string | undefined) => void;
|
|
27
29
|
};
|
|
28
30
|
export declare const createFileWatcherRegistry: () => FileWatcherRegistry;
|
|
29
31
|
export declare const setFileWatcherRegistry: (registry: FileWatcherRegistry) => () => void;
|
package/dist/file-watcher.js
CHANGED
|
@@ -69,7 +69,11 @@ const createFileWatcherRegistry = () => {
|
|
|
69
69
|
if (existenceOnly) {
|
|
70
70
|
if (!shared.existedBefore && existsNow) {
|
|
71
71
|
shared.existedBefore = true;
|
|
72
|
-
event = {
|
|
72
|
+
event = {
|
|
73
|
+
type: 'created',
|
|
74
|
+
content: '',
|
|
75
|
+
originatorClientId: undefined,
|
|
76
|
+
};
|
|
73
77
|
}
|
|
74
78
|
else if (shared.existedBefore && !existsNow) {
|
|
75
79
|
shared.existedBefore = false;
|
|
@@ -80,7 +84,7 @@ const createFileWatcherRegistry = () => {
|
|
|
80
84
|
const content = (0, node_fs_1.readFileSync)(file, 'utf-8');
|
|
81
85
|
shared.existedBefore = true;
|
|
82
86
|
shared.lastKnownContent = content;
|
|
83
|
-
event = { type: 'created', content };
|
|
87
|
+
event = { type: 'created', content, originatorClientId: undefined };
|
|
84
88
|
}
|
|
85
89
|
else if (shared.existedBefore && !existsNow) {
|
|
86
90
|
shared.existedBefore = false;
|
|
@@ -97,7 +101,7 @@ const createFileWatcherRegistry = () => {
|
|
|
97
101
|
return;
|
|
98
102
|
}
|
|
99
103
|
shared.lastKnownContent = content;
|
|
100
|
-
event = { type: 'changed', content };
|
|
104
|
+
event = { type: 'changed', content, originatorClientId: undefined };
|
|
101
105
|
}
|
|
102
106
|
if (!event) {
|
|
103
107
|
return;
|
|
@@ -119,7 +123,7 @@ const createFileWatcherRegistry = () => {
|
|
|
119
123
|
},
|
|
120
124
|
};
|
|
121
125
|
};
|
|
122
|
-
const _writeFileAndNotifyFileWatchers = (file, content) => {
|
|
126
|
+
const _writeFileAndNotifyFileWatchers = (file, content, originatorClientId) => {
|
|
123
127
|
(0, node_fs_1.writeFileSync)(file, content);
|
|
124
128
|
const shared = sharedWatchers.get(getRegistryKey(file, false));
|
|
125
129
|
if (!shared) {
|
|
@@ -128,7 +132,7 @@ const createFileWatcherRegistry = () => {
|
|
|
128
132
|
shared.lastKnownContent = content;
|
|
129
133
|
shared.existedBefore = true;
|
|
130
134
|
for (const subscriber of shared.subscribers) {
|
|
131
|
-
subscriber({ type: 'changed', content });
|
|
135
|
+
subscriber({ type: 'changed', content, originatorClientId });
|
|
132
136
|
}
|
|
133
137
|
};
|
|
134
138
|
return {
|
|
@@ -162,10 +166,10 @@ const installFileWatcher = (options) => {
|
|
|
162
166
|
return (0, exports.getFileWatcherRegistry)().installFileWatcher(options);
|
|
163
167
|
};
|
|
164
168
|
exports.installFileWatcher = installFileWatcher;
|
|
165
|
-
const writeFileAndNotifyFileWatchers = (file, content) => {
|
|
169
|
+
const writeFileAndNotifyFileWatchers = (file, content, originatorClientId) => {
|
|
166
170
|
if (!currentRegistry) {
|
|
167
171
|
return;
|
|
168
172
|
}
|
|
169
|
-
(0, exports.getFileWatcherRegistry)().writeFileAndNotifyFileWatchers(file, content);
|
|
173
|
+
(0, exports.getFileWatcherRegistry)().writeFileAndNotifyFileWatchers(file, content, originatorClientId);
|
|
170
174
|
};
|
|
171
175
|
exports.writeFileAndNotifyFileWatchers = writeFileAndNotifyFileWatchers;
|
package/dist/index.d.ts
CHANGED
|
@@ -63,7 +63,7 @@ export declare const StudioServerInternals: {
|
|
|
63
63
|
exists: boolean;
|
|
64
64
|
unwatch: () => void;
|
|
65
65
|
};
|
|
66
|
-
writeFileAndNotifyFileWatchers: (file: string, content: string) => void;
|
|
66
|
+
writeFileAndNotifyFileWatchers: (file: string, content: string, originatorClientId: string | undefined) => void;
|
|
67
67
|
createFileWatcherRegistry: () => import("./file-watcher").FileWatcherRegistry;
|
|
68
68
|
setFileWatcherRegistry: (registry: import("./file-watcher").FileWatcherRegistry) => () => void;
|
|
69
69
|
AnsiDiff: typeof AnsiDiff;
|
|
@@ -80,6 +80,16 @@ export declare const StudioServerInternals: {
|
|
|
80
80
|
newContents: string;
|
|
81
81
|
changesMade: import("./codemods/recast-mods").Change[];
|
|
82
82
|
};
|
|
83
|
+
formatOutput: (tsContent: string) => Promise<string>;
|
|
84
|
+
updateDefaultProps: ({ input, compositionId, newDefaultProps, enumPaths, }: {
|
|
85
|
+
input: string;
|
|
86
|
+
compositionId: string;
|
|
87
|
+
newDefaultProps: Record<string, unknown>;
|
|
88
|
+
enumPaths: import("@remotion/studio-shared").EnumPath[];
|
|
89
|
+
}) => Promise<{
|
|
90
|
+
output: string;
|
|
91
|
+
formatted: boolean;
|
|
92
|
+
}>;
|
|
83
93
|
getInstalledDependencies: (remotionRoot: string) => {
|
|
84
94
|
dependencies: string[];
|
|
85
95
|
devDependencies: string[];
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "getDefaultOutLocation", { enumerable: true, get:
|
|
|
7
7
|
const ansi_diff_1 = require("./ansi-diff");
|
|
8
8
|
const client_render_queue_1 = require("./client-render-queue");
|
|
9
9
|
const duplicate_composition_1 = require("./codemods/duplicate-composition");
|
|
10
|
+
const update_default_props_1 = require("./codemods/update-default-props");
|
|
10
11
|
const file_watcher_1 = require("./file-watcher");
|
|
11
12
|
const get_latest_remotion_version_1 = require("./get-latest-remotion-version");
|
|
12
13
|
const get_installed_dependencies_1 = require("./helpers/get-installed-dependencies");
|
|
@@ -32,6 +33,8 @@ exports.StudioServerInternals = {
|
|
|
32
33
|
AnsiDiff: ansi_diff_1.AnsiDiff,
|
|
33
34
|
formatBytes: studio_shared_1.formatBytes,
|
|
34
35
|
parseAndApplyCodemod: duplicate_composition_1.parseAndApplyCodemod,
|
|
36
|
+
formatOutput: duplicate_composition_1.formatOutput,
|
|
37
|
+
updateDefaultProps: update_default_props_1.updateDefaultProps,
|
|
35
38
|
getInstalledDependencies: get_installed_dependencies_1.getInstalledDependencies,
|
|
36
39
|
getInstalledDependenciesWithVersions: get_installed_dependencies_1.getInstalledDependenciesWithVersions,
|
|
37
40
|
getInstallCommand: install_command_1.getInstallCommand,
|
|
@@ -27,7 +27,7 @@ const applyCodemodHandler = async ({ input: { codemod, dryRun }, logLevel, remot
|
|
|
27
27
|
newLines: formatted.split('\n'),
|
|
28
28
|
});
|
|
29
29
|
if (!dryRun) {
|
|
30
|
-
(0, file_watcher_1.writeFileAndNotifyFileWatchers)(projectInfo.rootFile, formatted);
|
|
30
|
+
(0, file_watcher_1.writeFileAndNotifyFileWatchers)(projectInfo.rootFile, formatted, undefined);
|
|
31
31
|
const end = Date.now() - time;
|
|
32
32
|
renderer_1.RenderInternals.Log.info({ indent: false, logLevel }, renderer_1.RenderInternals.chalk.blue(`Edited root file in ${end}ms`));
|
|
33
33
|
}
|
|
@@ -126,7 +126,7 @@ const applyVisualControlHandler = async ({ input: { fileName, changes }, remotio
|
|
|
126
126
|
});
|
|
127
127
|
(0, undo_stack_1.suppressUndoStackInvalidation)(absolutePath);
|
|
128
128
|
(0, watch_ignore_next_change_1.suppressBundlerUpdateForFile)(absolutePath);
|
|
129
|
-
(0, file_watcher_1.writeFileAndNotifyFileWatchers)(absolutePath, output);
|
|
129
|
+
(0, file_watcher_1.writeFileAndNotifyFileWatchers)(absolutePath, output, undefined);
|
|
130
130
|
(0, live_events_1.waitForLiveEventsListener)().then((listener) => {
|
|
131
131
|
listener.sendEventToClient({
|
|
132
132
|
type: 'visual-control-values-changed',
|
|
@@ -43,6 +43,7 @@ const renderer_1 = require("@remotion/renderer");
|
|
|
43
43
|
const recast = __importStar(require("recast"));
|
|
44
44
|
const parse_ast_1 = require("../../codemods/parse-ast");
|
|
45
45
|
const get_ast_node_path_1 = require("../../helpers/get-ast-node-path");
|
|
46
|
+
const jsx_element_not_found_at_location_error_1 = require("../jsx-element-not-found-at-location-error");
|
|
46
47
|
const can_update_effect_props_1 = require("./can-update-effect-props");
|
|
47
48
|
const isStaticValue = (node) => {
|
|
48
49
|
switch (node.type) {
|
|
@@ -295,7 +296,7 @@ const computeSequencePropsStatusFromContent = ({ fileContents, nodePath, keys, e
|
|
|
295
296
|
const ast = (0, parse_ast_1.parseAst)(fileContents);
|
|
296
297
|
const jsxElement = (0, exports.findJsxElementAtNodePath)(ast, nodePath);
|
|
297
298
|
if (!jsxElement) {
|
|
298
|
-
throw new
|
|
299
|
+
throw new jsx_element_not_found_at_location_error_1.JsxElementNotFoundAtLocationError();
|
|
299
300
|
}
|
|
300
301
|
const filteredProps = computeSequenceOnlyPropsRecord({ jsxElement, keys });
|
|
301
302
|
const effectsStatuses = computeEffectsForJsx({ jsxElement, effects });
|
|
@@ -39,7 +39,7 @@ const deleteJsxNodeHandler = async ({ input: { fileName, nodePath }, remotionRoo
|
|
|
39
39
|
suppressHmrOnFileRestore: false,
|
|
40
40
|
});
|
|
41
41
|
(0, undo_stack_1.suppressUndoStackInvalidation)(absolutePath);
|
|
42
|
-
(0, file_watcher_1.writeFileAndNotifyFileWatchers)(absolutePath, output);
|
|
42
|
+
(0, file_watcher_1.writeFileAndNotifyFileWatchers)(absolutePath, output, undefined);
|
|
43
43
|
const locationLabel = (0, format_log_file_location_1.formatLogFileLocation)({
|
|
44
44
|
remotionRoot,
|
|
45
45
|
absolutePath,
|
|
@@ -39,7 +39,7 @@ const duplicateJsxNodeHandler = async ({ input: { fileName, nodePath }, remotion
|
|
|
39
39
|
suppressHmrOnFileRestore: false,
|
|
40
40
|
});
|
|
41
41
|
(0, undo_stack_1.suppressUndoStackInvalidation)(absolutePath);
|
|
42
|
-
(0, file_watcher_1.writeFileAndNotifyFileWatchers)(absolutePath, output);
|
|
42
|
+
(0, file_watcher_1.writeFileAndNotifyFileWatchers)(absolutePath, output, undefined);
|
|
43
43
|
const locationLabel = (0, format_log_file_location_1.formatLogFileLocation)({
|
|
44
44
|
remotionRoot,
|
|
45
45
|
absolutePath,
|
|
@@ -19,7 +19,7 @@ const format_effect_prop_change_1 = require("./log-updates/format-effect-prop-ch
|
|
|
19
19
|
const log_effect_update_1 = require("./log-updates/log-effect-update");
|
|
20
20
|
const log_update_1 = require("./log-updates/log-update");
|
|
21
21
|
const save_props_mutex_1 = require("./save-props-mutex");
|
|
22
|
-
const saveEffectPropsHandler = ({ input: { fileName, sequenceNodePath, effectIndex, key, value, defaultValue, schema, }, remotionRoot, logLevel, }) => (0, save_props_mutex_1.withSavePropsLock)(async () => {
|
|
22
|
+
const saveEffectPropsHandler = ({ input: { fileName, sequenceNodePath, effectIndex, key, value, defaultValue, schema, clientId, }, remotionRoot, logLevel, }) => (0, save_props_mutex_1.withSavePropsLock)(async () => {
|
|
23
23
|
renderer_1.RenderInternals.Log.trace({ indent: false, logLevel }, `[save-effect-props] Received request for fileName="${fileName}" effectIndex=${effectIndex} key="${key}"`);
|
|
24
24
|
const absolutePath = node_path_1.default.resolve(remotionRoot, fileName);
|
|
25
25
|
const fileRelativeToRoot = node_path_1.default.relative(remotionRoot, absolutePath);
|
|
@@ -75,7 +75,7 @@ const saveEffectPropsHandler = ({ input: { fileName, sequenceNodePath, effectInd
|
|
|
75
75
|
});
|
|
76
76
|
(0, undo_stack_1.suppressUndoStackInvalidation)(absolutePath);
|
|
77
77
|
(0, watch_ignore_next_change_1.suppressBundlerUpdateForFile)(absolutePath);
|
|
78
|
-
(0, file_watcher_1.writeFileAndNotifyFileWatchers)(absolutePath, output);
|
|
78
|
+
(0, file_watcher_1.writeFileAndNotifyFileWatchers)(absolutePath, output, clientId);
|
|
79
79
|
(0, log_effect_update_1.logEffectUpdate)({
|
|
80
80
|
fileRelativeToRoot,
|
|
81
81
|
line: logLine,
|
|
@@ -17,7 +17,7 @@ const can_update_sequence_props_1 = require("./can-update-sequence-props");
|
|
|
17
17
|
const format_prop_change_1 = require("./log-updates/format-prop-change");
|
|
18
18
|
const log_update_1 = require("./log-updates/log-update");
|
|
19
19
|
const save_props_mutex_1 = require("./save-props-mutex");
|
|
20
|
-
const saveSequencePropsHandler = ({ input: { fileName, nodePath, key, value, defaultValue, schema }, remotionRoot, logLevel, }) => (0, save_props_mutex_1.withSavePropsLock)(async () => {
|
|
20
|
+
const saveSequencePropsHandler = ({ input: { fileName, nodePath, key, value, defaultValue, schema, clientId }, remotionRoot, logLevel, }) => (0, save_props_mutex_1.withSavePropsLock)(async () => {
|
|
21
21
|
renderer_1.RenderInternals.Log.trace({ indent: false, logLevel }, `[save-sequence-props] Received request for fileName="${fileName}" key="${key}"`);
|
|
22
22
|
const absolutePath = node_path_1.default.resolve(remotionRoot, fileName);
|
|
23
23
|
const fileRelativeToRoot = node_path_1.default.relative(remotionRoot, absolutePath);
|
|
@@ -75,7 +75,7 @@ const saveSequencePropsHandler = ({ input: { fileName, nodePath, key, value, def
|
|
|
75
75
|
});
|
|
76
76
|
(0, undo_stack_1.suppressUndoStackInvalidation)(absolutePath);
|
|
77
77
|
(0, watch_ignore_next_change_1.suppressBundlerUpdateForFile)(absolutePath);
|
|
78
|
-
(0, file_watcher_1.writeFileAndNotifyFileWatchers)(absolutePath, output);
|
|
78
|
+
(0, file_watcher_1.writeFileAndNotifyFileWatchers)(absolutePath, output, clientId);
|
|
79
79
|
(0, log_update_1.logUpdate)({
|
|
80
80
|
fileRelativeToRoot,
|
|
81
81
|
line: logLine,
|
|
@@ -45,7 +45,7 @@ const updateDefaultPropsHandler = async ({ input: { compositionId, defaultProps,
|
|
|
45
45
|
});
|
|
46
46
|
(0, undo_stack_1.suppressUndoStackInvalidation)(projectInfo.rootFile);
|
|
47
47
|
(0, watch_ignore_next_change_1.suppressBundlerUpdateForFile)(projectInfo.rootFile);
|
|
48
|
-
(0, file_watcher_1.writeFileAndNotifyFileWatchers)(projectInfo.rootFile, output);
|
|
48
|
+
(0, file_watcher_1.writeFileAndNotifyFileWatchers)(projectInfo.rootFile, output, undefined);
|
|
49
49
|
const locationLabel = (0, format_log_file_location_1.formatLogFileLocation)({
|
|
50
50
|
remotionRoot,
|
|
51
51
|
absolutePath: projectInfo.rootFile,
|
|
@@ -8,6 +8,7 @@ const node_path_1 = __importDefault(require("node:path"));
|
|
|
8
8
|
const renderer_1 = require("@remotion/renderer");
|
|
9
9
|
const studio_shared_1 = require("@remotion/studio-shared");
|
|
10
10
|
const file_watcher_1 = require("../file-watcher");
|
|
11
|
+
const jsx_element_not_found_at_location_error_1 = require("./jsx-element-not-found-at-location-error");
|
|
11
12
|
const live_events_1 = require("./live-events");
|
|
12
13
|
const node_path_cache_1 = require("./node-path-cache");
|
|
13
14
|
const can_update_sequence_props_1 = require("./routes/can-update-sequence-props");
|
|
@@ -77,6 +78,9 @@ const subscribeToSequencePropsWatchers = ({ fileName, line, column, keys, effect
|
|
|
77
78
|
if (event.type === 'deleted') {
|
|
78
79
|
return;
|
|
79
80
|
}
|
|
81
|
+
if (event.originatorClientId === clientId) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
80
84
|
try {
|
|
81
85
|
const result = (0, can_update_sequence_props_1.computeSequencePropsStatusFromContent)({
|
|
82
86
|
fileContents: event.content,
|
|
@@ -101,6 +105,17 @@ const subscribeToSequencePropsWatchers = ({ fileName, line, column, keys, effect
|
|
|
101
105
|
});
|
|
102
106
|
}
|
|
103
107
|
catch (error) {
|
|
108
|
+
if (error instanceof jsx_element_not_found_at_location_error_1.JsxElementNotFoundAtLocationError) {
|
|
109
|
+
(0, live_events_1.waitForLiveEventsListener)().then((listener) => {
|
|
110
|
+
listener.sendEventToClientId(clientId, {
|
|
111
|
+
type: 'lost-node-path',
|
|
112
|
+
fileName,
|
|
113
|
+
line,
|
|
114
|
+
column,
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
104
119
|
renderer_1.RenderInternals.Log.error({ indent: false, logLevel }, error);
|
|
105
120
|
}
|
|
106
121
|
},
|
|
@@ -195,7 +195,7 @@ function popUndo() {
|
|
|
195
195
|
if (entry.suppressHmrOnFileRestore) {
|
|
196
196
|
(0, watch_ignore_next_change_1.suppressBundlerUpdateForFile)(entry.filePath);
|
|
197
197
|
}
|
|
198
|
-
(0, file_watcher_1.writeFileAndNotifyFileWatchers)(entry.filePath, entry.oldContents);
|
|
198
|
+
(0, file_watcher_1.writeFileAndNotifyFileWatchers)(entry.filePath, entry.oldContents, undefined);
|
|
199
199
|
renderer_1.RenderInternals.Log.verbose({ indent: false, logLevel: storedLogLevel }, renderer_1.RenderInternals.chalk.gray(`Undo: restored ${entry.filePath} (undo: ${undoStack.length}, redo: ${redoStack.length})`));
|
|
200
200
|
logFileAction(entry.description.undoMessage, entry.filePath, entry.logLine);
|
|
201
201
|
if (entry.entryType === 'visual-control') {
|
|
@@ -223,7 +223,7 @@ function popRedo() {
|
|
|
223
223
|
if (entry.suppressHmrOnFileRestore) {
|
|
224
224
|
(0, watch_ignore_next_change_1.suppressBundlerUpdateForFile)(entry.filePath);
|
|
225
225
|
}
|
|
226
|
-
(0, file_watcher_1.writeFileAndNotifyFileWatchers)(entry.filePath, entry.oldContents);
|
|
226
|
+
(0, file_watcher_1.writeFileAndNotifyFileWatchers)(entry.filePath, entry.oldContents, undefined);
|
|
227
227
|
renderer_1.RenderInternals.Log.verbose({ indent: false, logLevel: storedLogLevel }, renderer_1.RenderInternals.chalk.gray(`Redo: restored ${entry.filePath} (undo: ${undoStack.length}, redo: ${redoStack.length})`));
|
|
228
228
|
logFileAction(entry.description.redoMessage, entry.filePath, entry.logLine);
|
|
229
229
|
if (entry.entryType === 'visual-control') {
|
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.
|
|
6
|
+
"version": "4.0.464",
|
|
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.
|
|
30
|
+
"remotion": "4.0.464",
|
|
31
31
|
"recast": "0.23.11",
|
|
32
|
-
"@remotion/bundler": "4.0.
|
|
33
|
-
"@remotion/renderer": "4.0.
|
|
34
|
-
"@remotion/studio-shared": "4.0.
|
|
32
|
+
"@remotion/bundler": "4.0.464",
|
|
33
|
+
"@remotion/renderer": "4.0.464",
|
|
34
|
+
"@remotion/studio-shared": "4.0.464",
|
|
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.
|
|
42
|
+
"@remotion/eslint-config-internal": "4.0.464",
|
|
43
43
|
"eslint": "9.19.0",
|
|
44
44
|
"@types/node": "20.12.14",
|
|
45
45
|
"@typescript/native-preview": "7.0.0-dev.20260217.1"
|