@remotion/studio-server 4.0.434 → 4.0.436
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/preview-server/default-props-watchers.d.ts +12 -0
- package/dist/preview-server/default-props-watchers.js +111 -0
- package/dist/preview-server/routes/redo.d.ts +3 -0
- package/dist/preview-server/routes/redo.js +8 -0
- package/dist/preview-server/routes/subscribe-to-default-props.d.ts +3 -0
- package/dist/preview-server/routes/subscribe-to-default-props.js +13 -0
- package/dist/preview-server/routes/undo.d.ts +3 -0
- package/dist/preview-server/routes/undo.js +8 -0
- package/dist/preview-server/routes/unsubscribe-from-default-props.d.ts +3 -0
- package/dist/preview-server/routes/unsubscribe-from-default-props.js +12 -0
- package/dist/preview-server/undo-stack.d.ts +23 -0
- package/dist/preview-server/undo-stack.js +159 -0
- package/package.json +6 -6
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { CanUpdateDefaultPropsResponse } from '@remotion/studio-shared';
|
|
2
|
+
export declare const subscribeToDefaultPropsWatchers: ({ compositionId, clientId, remotionRoot, entryPoint, }: {
|
|
3
|
+
compositionId: string;
|
|
4
|
+
clientId: string;
|
|
5
|
+
remotionRoot: string;
|
|
6
|
+
entryPoint: string;
|
|
7
|
+
}) => Promise<CanUpdateDefaultPropsResponse>;
|
|
8
|
+
export declare const unsubscribeFromDefaultPropsWatchers: ({ compositionId, clientId, }: {
|
|
9
|
+
compositionId: string;
|
|
10
|
+
clientId: string;
|
|
11
|
+
}) => void;
|
|
12
|
+
export declare const unsubscribeClientDefaultPropsWatchers: (clientId: string) => void;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.unsubscribeClientDefaultPropsWatchers = exports.unsubscribeFromDefaultPropsWatchers = exports.subscribeToDefaultPropsWatchers = void 0;
|
|
4
|
+
const file_watcher_1 = require("../file-watcher");
|
|
5
|
+
const live_events_1 = require("./live-events");
|
|
6
|
+
const can_update_default_props_1 = require("./routes/can-update-default-props");
|
|
7
|
+
// Global file watcher — at most one for the root file
|
|
8
|
+
let globalWatcher = null;
|
|
9
|
+
// Per-compositionId set of subscribed clientIds
|
|
10
|
+
const subscriptions = {};
|
|
11
|
+
// Cached config for recomputation on file change
|
|
12
|
+
let watcherConfig = null;
|
|
13
|
+
const ensureGlobalWatcher = (rootFile) => {
|
|
14
|
+
if (globalWatcher) {
|
|
15
|
+
globalWatcher.refCount++;
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const { unwatch } = (0, file_watcher_1.installFileWatcher)({
|
|
19
|
+
file: rootFile,
|
|
20
|
+
onChange: (type) => {
|
|
21
|
+
if (type === 'deleted') {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (!watcherConfig) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const compositionIds = Object.keys(subscriptions);
|
|
28
|
+
for (const compositionId of compositionIds) {
|
|
29
|
+
if (subscriptions[compositionId].size === 0) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
const clientIds = [...subscriptions[compositionId]];
|
|
33
|
+
(0, can_update_default_props_1.computeCanUpdateDefaultProps)({
|
|
34
|
+
compositionId,
|
|
35
|
+
remotionRoot: watcherConfig.remotionRoot,
|
|
36
|
+
entryPoint: watcherConfig.entryPoint,
|
|
37
|
+
}).then(({ result: newResult }) => {
|
|
38
|
+
(0, live_events_1.waitForLiveEventsListener)().then((listener) => {
|
|
39
|
+
const event = {
|
|
40
|
+
type: 'default-props-updatable-changed',
|
|
41
|
+
compositionId,
|
|
42
|
+
result: newResult,
|
|
43
|
+
};
|
|
44
|
+
for (const cId of clientIds) {
|
|
45
|
+
listener.sendEventToClientId(cId, event);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
globalWatcher = { unwatch, rootFile, refCount: 1 };
|
|
53
|
+
};
|
|
54
|
+
const releaseGlobalWatcher = () => {
|
|
55
|
+
if (!globalWatcher) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
globalWatcher.refCount--;
|
|
59
|
+
if (globalWatcher.refCount <= 0) {
|
|
60
|
+
globalWatcher.unwatch();
|
|
61
|
+
globalWatcher = null;
|
|
62
|
+
watcherConfig = null;
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
const subscribeToDefaultPropsWatchers = async ({ compositionId, clientId, remotionRoot, entryPoint, }) => {
|
|
66
|
+
var _a;
|
|
67
|
+
const { result, rootFile } = await (0, can_update_default_props_1.computeCanUpdateDefaultProps)({
|
|
68
|
+
compositionId,
|
|
69
|
+
remotionRoot,
|
|
70
|
+
entryPoint,
|
|
71
|
+
});
|
|
72
|
+
// Remove from any previous subscription for this client+composition
|
|
73
|
+
if ((_a = subscriptions[compositionId]) === null || _a === void 0 ? void 0 : _a.has(clientId)) {
|
|
74
|
+
subscriptions[compositionId].delete(clientId);
|
|
75
|
+
releaseGlobalWatcher();
|
|
76
|
+
}
|
|
77
|
+
if (rootFile) {
|
|
78
|
+
watcherConfig = { remotionRoot, entryPoint };
|
|
79
|
+
if (!subscriptions[compositionId]) {
|
|
80
|
+
subscriptions[compositionId] = new Set();
|
|
81
|
+
}
|
|
82
|
+
subscriptions[compositionId].add(clientId);
|
|
83
|
+
ensureGlobalWatcher(rootFile);
|
|
84
|
+
}
|
|
85
|
+
return result;
|
|
86
|
+
};
|
|
87
|
+
exports.subscribeToDefaultPropsWatchers = subscribeToDefaultPropsWatchers;
|
|
88
|
+
const unsubscribeFromDefaultPropsWatchers = ({ compositionId, clientId, }) => {
|
|
89
|
+
var _a;
|
|
90
|
+
if (!((_a = subscriptions[compositionId]) === null || _a === void 0 ? void 0 : _a.has(clientId))) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
subscriptions[compositionId].delete(clientId);
|
|
94
|
+
if (subscriptions[compositionId].size === 0) {
|
|
95
|
+
delete subscriptions[compositionId];
|
|
96
|
+
}
|
|
97
|
+
releaseGlobalWatcher();
|
|
98
|
+
};
|
|
99
|
+
exports.unsubscribeFromDefaultPropsWatchers = unsubscribeFromDefaultPropsWatchers;
|
|
100
|
+
const unsubscribeClientDefaultPropsWatchers = (clientId) => {
|
|
101
|
+
for (const compositionId of Object.keys(subscriptions)) {
|
|
102
|
+
if (subscriptions[compositionId].has(clientId)) {
|
|
103
|
+
subscriptions[compositionId].delete(clientId);
|
|
104
|
+
if (subscriptions[compositionId].size === 0) {
|
|
105
|
+
delete subscriptions[compositionId];
|
|
106
|
+
}
|
|
107
|
+
releaseGlobalWatcher();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
exports.unsubscribeClientDefaultPropsWatchers = unsubscribeClientDefaultPropsWatchers;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.redoHandler = void 0;
|
|
4
|
+
const undo_stack_1 = require("../undo-stack");
|
|
5
|
+
const redoHandler = () => {
|
|
6
|
+
return Promise.resolve((0, undo_stack_1.popRedo)());
|
|
7
|
+
};
|
|
8
|
+
exports.redoHandler = redoHandler;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { SubscribeToDefaultPropsRequest, SubscribeToDefaultPropsResponse } from '@remotion/studio-shared';
|
|
2
|
+
import type { ApiHandler } from '../api-types';
|
|
3
|
+
export declare const subscribeToDefaultProps: ApiHandler<SubscribeToDefaultPropsRequest, SubscribeToDefaultPropsResponse>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.subscribeToDefaultProps = void 0;
|
|
4
|
+
const default_props_watchers_1 = require("../default-props-watchers");
|
|
5
|
+
const subscribeToDefaultProps = ({ input: { compositionId, clientId }, remotionRoot, entryPoint }) => {
|
|
6
|
+
return (0, default_props_watchers_1.subscribeToDefaultPropsWatchers)({
|
|
7
|
+
compositionId,
|
|
8
|
+
clientId,
|
|
9
|
+
remotionRoot,
|
|
10
|
+
entryPoint,
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
exports.subscribeToDefaultProps = subscribeToDefaultProps;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.undoHandler = void 0;
|
|
4
|
+
const undo_stack_1 = require("../undo-stack");
|
|
5
|
+
const undoHandler = () => {
|
|
6
|
+
return Promise.resolve((0, undo_stack_1.popUndo)());
|
|
7
|
+
};
|
|
8
|
+
exports.undoHandler = undoHandler;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.unsubscribeFromDefaultProps = void 0;
|
|
4
|
+
const default_props_watchers_1 = require("../default-props-watchers");
|
|
5
|
+
const unsubscribeFromDefaultProps = ({ input: { compositionId, clientId } }) => {
|
|
6
|
+
(0, default_props_watchers_1.unsubscribeFromDefaultPropsWatchers)({
|
|
7
|
+
compositionId,
|
|
8
|
+
clientId,
|
|
9
|
+
});
|
|
10
|
+
return Promise.resolve(undefined);
|
|
11
|
+
};
|
|
12
|
+
exports.unsubscribeFromDefaultProps = unsubscribeFromDefaultProps;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { LogLevel } from '@remotion/renderer';
|
|
2
|
+
interface UndoEntry {
|
|
3
|
+
filePath: string;
|
|
4
|
+
oldContents: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function pushToUndoStack(filePath: string, oldContents: string, logLevel: LogLevel): void;
|
|
7
|
+
export declare function pushToRedoStack(filePath: string, oldContents: string): void;
|
|
8
|
+
export declare function suppressUndoStackInvalidation(filePath: string): void;
|
|
9
|
+
export declare function popUndo(): {
|
|
10
|
+
success: true;
|
|
11
|
+
} | {
|
|
12
|
+
success: false;
|
|
13
|
+
reason: string;
|
|
14
|
+
};
|
|
15
|
+
export declare function popRedo(): {
|
|
16
|
+
success: true;
|
|
17
|
+
} | {
|
|
18
|
+
success: false;
|
|
19
|
+
reason: string;
|
|
20
|
+
};
|
|
21
|
+
export declare function getUndoStack(): readonly UndoEntry[];
|
|
22
|
+
export declare function getRedoStack(): readonly UndoEntry[];
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.pushToUndoStack = pushToUndoStack;
|
|
4
|
+
exports.pushToRedoStack = pushToRedoStack;
|
|
5
|
+
exports.suppressUndoStackInvalidation = suppressUndoStackInvalidation;
|
|
6
|
+
exports.popUndo = popUndo;
|
|
7
|
+
exports.popRedo = popRedo;
|
|
8
|
+
exports.getUndoStack = getUndoStack;
|
|
9
|
+
exports.getRedoStack = getRedoStack;
|
|
10
|
+
const node_fs_1 = require("node:fs");
|
|
11
|
+
const renderer_1 = require("@remotion/renderer");
|
|
12
|
+
const file_watcher_1 = require("../file-watcher");
|
|
13
|
+
const hmr_suppression_1 = require("./hmr-suppression");
|
|
14
|
+
const live_events_1 = require("./live-events");
|
|
15
|
+
const MAX_ENTRIES = 100;
|
|
16
|
+
const undoStack = [];
|
|
17
|
+
const redoStack = [];
|
|
18
|
+
const suppressedWrites = new Map();
|
|
19
|
+
const watchers = new Map();
|
|
20
|
+
let storedLogLevel = 'info';
|
|
21
|
+
function broadcastState() {
|
|
22
|
+
const undoFile = undoStack.length > 0 ? undoStack[undoStack.length - 1].filePath : null;
|
|
23
|
+
const redoFile = redoStack.length > 0 ? redoStack[redoStack.length - 1].filePath : null;
|
|
24
|
+
(0, live_events_1.waitForLiveEventsListener)().then((listener) => {
|
|
25
|
+
listener.sendEventToClient({
|
|
26
|
+
type: 'undo-redo-stack-changed',
|
|
27
|
+
undoFile,
|
|
28
|
+
redoFile,
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
function pushToUndoStack(filePath, oldContents, logLevel) {
|
|
33
|
+
storedLogLevel = logLevel;
|
|
34
|
+
undoStack.push({ filePath, oldContents });
|
|
35
|
+
if (undoStack.length > MAX_ENTRIES) {
|
|
36
|
+
undoStack.shift();
|
|
37
|
+
}
|
|
38
|
+
redoStack.length = 0;
|
|
39
|
+
renderer_1.RenderInternals.Log.verbose({ indent: false, logLevel }, renderer_1.RenderInternals.chalk.gray(`Undo stack: added entry for ${filePath} (${undoStack.length} items)`));
|
|
40
|
+
ensureWatching(filePath);
|
|
41
|
+
broadcastState();
|
|
42
|
+
}
|
|
43
|
+
function pushToRedoStack(filePath, oldContents) {
|
|
44
|
+
redoStack.push({ filePath, oldContents });
|
|
45
|
+
if (redoStack.length > MAX_ENTRIES) {
|
|
46
|
+
redoStack.shift();
|
|
47
|
+
}
|
|
48
|
+
renderer_1.RenderInternals.Log.verbose({ indent: false, logLevel: storedLogLevel }, renderer_1.RenderInternals.chalk.gray(`Redo stack: added entry for ${filePath} (${redoStack.length} items)`));
|
|
49
|
+
ensureWatching(filePath);
|
|
50
|
+
broadcastState();
|
|
51
|
+
}
|
|
52
|
+
function suppressUndoStackInvalidation(filePath) {
|
|
53
|
+
var _a;
|
|
54
|
+
suppressedWrites.set(filePath, ((_a = suppressedWrites.get(filePath)) !== null && _a !== void 0 ? _a : 0) + 1);
|
|
55
|
+
}
|
|
56
|
+
function ensureWatching(filePath) {
|
|
57
|
+
if (watchers.has(filePath)) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const watcher = (0, file_watcher_1.installFileWatcher)({
|
|
61
|
+
file: filePath,
|
|
62
|
+
onChange: () => {
|
|
63
|
+
var _a;
|
|
64
|
+
const count = (_a = suppressedWrites.get(filePath)) !== null && _a !== void 0 ? _a : 0;
|
|
65
|
+
if (count > 0) {
|
|
66
|
+
if (count === 1) {
|
|
67
|
+
suppressedWrites.delete(filePath);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
suppressedWrites.set(filePath, count - 1);
|
|
71
|
+
}
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
invalidateForFile(filePath);
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
watchers.set(filePath, watcher);
|
|
78
|
+
}
|
|
79
|
+
function invalidateForFile(filePath) {
|
|
80
|
+
let changed = false;
|
|
81
|
+
let lastUndoIndex = -1;
|
|
82
|
+
for (let i = undoStack.length - 1; i >= 0; i--) {
|
|
83
|
+
if (undoStack[i].filePath === filePath) {
|
|
84
|
+
lastUndoIndex = i;
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (lastUndoIndex !== -1) {
|
|
89
|
+
const removed = lastUndoIndex + 1;
|
|
90
|
+
undoStack.splice(0, removed);
|
|
91
|
+
changed = true;
|
|
92
|
+
renderer_1.RenderInternals.Log.verbose({ indent: false, logLevel: storedLogLevel }, renderer_1.RenderInternals.chalk.gray(`Undo stack: ${filePath} was externally modified, removed ${removed} entries (${undoStack.length} items)`));
|
|
93
|
+
}
|
|
94
|
+
let lastRedoIndex = -1;
|
|
95
|
+
for (let i = redoStack.length - 1; i >= 0; i--) {
|
|
96
|
+
if (redoStack[i].filePath === filePath) {
|
|
97
|
+
lastRedoIndex = i;
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (lastRedoIndex !== -1) {
|
|
102
|
+
const removed = lastRedoIndex + 1;
|
|
103
|
+
redoStack.splice(0, removed);
|
|
104
|
+
changed = true;
|
|
105
|
+
renderer_1.RenderInternals.Log.verbose({ indent: false, logLevel: storedLogLevel }, renderer_1.RenderInternals.chalk.gray(`Redo stack: ${filePath} was externally modified, removed ${removed} entries (${redoStack.length} items)`));
|
|
106
|
+
}
|
|
107
|
+
cleanupWatchers();
|
|
108
|
+
if (changed) {
|
|
109
|
+
broadcastState();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function cleanupWatchers() {
|
|
113
|
+
const filesInStacks = new Set([
|
|
114
|
+
...undoStack.map((e) => e.filePath),
|
|
115
|
+
...redoStack.map((e) => e.filePath),
|
|
116
|
+
]);
|
|
117
|
+
for (const [filePath, watcher] of watchers) {
|
|
118
|
+
if (!filesInStacks.has(filePath)) {
|
|
119
|
+
watcher.unwatch();
|
|
120
|
+
watchers.delete(filePath);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
function popUndo() {
|
|
125
|
+
const entry = undoStack.pop();
|
|
126
|
+
if (!entry) {
|
|
127
|
+
return { success: false, reason: 'Nothing to undo' };
|
|
128
|
+
}
|
|
129
|
+
const currentContents = (0, node_fs_1.readFileSync)(entry.filePath, 'utf-8');
|
|
130
|
+
redoStack.push({ filePath: entry.filePath, oldContents: currentContents });
|
|
131
|
+
suppressUndoStackInvalidation(entry.filePath);
|
|
132
|
+
(0, hmr_suppression_1.suppressHmrForFile)(entry.filePath);
|
|
133
|
+
(0, node_fs_1.writeFileSync)(entry.filePath, entry.oldContents);
|
|
134
|
+
renderer_1.RenderInternals.Log.verbose({ indent: false, logLevel: storedLogLevel }, renderer_1.RenderInternals.chalk.gray(`Undo: restored ${entry.filePath} (undo: ${undoStack.length}, redo: ${redoStack.length})`));
|
|
135
|
+
ensureWatching(entry.filePath);
|
|
136
|
+
broadcastState();
|
|
137
|
+
return { success: true };
|
|
138
|
+
}
|
|
139
|
+
function popRedo() {
|
|
140
|
+
const entry = redoStack.pop();
|
|
141
|
+
if (!entry) {
|
|
142
|
+
return { success: false, reason: 'Nothing to redo' };
|
|
143
|
+
}
|
|
144
|
+
const currentContents = (0, node_fs_1.readFileSync)(entry.filePath, 'utf-8');
|
|
145
|
+
undoStack.push({ filePath: entry.filePath, oldContents: currentContents });
|
|
146
|
+
suppressUndoStackInvalidation(entry.filePath);
|
|
147
|
+
(0, hmr_suppression_1.suppressHmrForFile)(entry.filePath);
|
|
148
|
+
(0, node_fs_1.writeFileSync)(entry.filePath, entry.oldContents);
|
|
149
|
+
renderer_1.RenderInternals.Log.verbose({ indent: false, logLevel: storedLogLevel }, renderer_1.RenderInternals.chalk.gray(`Redo: restored ${entry.filePath} (undo: ${undoStack.length}, redo: ${redoStack.length})`));
|
|
150
|
+
ensureWatching(entry.filePath);
|
|
151
|
+
broadcastState();
|
|
152
|
+
return { success: true };
|
|
153
|
+
}
|
|
154
|
+
function getUndoStack() {
|
|
155
|
+
return undoStack;
|
|
156
|
+
}
|
|
157
|
+
function getRedoStack() {
|
|
158
|
+
return redoStack;
|
|
159
|
+
}
|
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.436",
|
|
7
7
|
"description": "Run a Remotion Studio with a server backend",
|
|
8
8
|
"main": "dist",
|
|
9
9
|
"sideEffects": false,
|
|
@@ -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.436",
|
|
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.436",
|
|
33
|
+
"@remotion/renderer": "4.0.436",
|
|
34
|
+
"@remotion/studio-shared": "4.0.436",
|
|
35
35
|
"memfs": "3.4.3",
|
|
36
36
|
"source-map": "0.7.3",
|
|
37
37
|
"open": "^8.4.2"
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"react": "19.2.3",
|
|
42
42
|
"@babel/types": "7.24.0",
|
|
43
43
|
"@types/semver": "^7.3.4",
|
|
44
|
-
"@remotion/eslint-config-internal": "4.0.
|
|
44
|
+
"@remotion/eslint-config-internal": "4.0.436",
|
|
45
45
|
"eslint": "9.19.0",
|
|
46
46
|
"@types/node": "20.12.14",
|
|
47
47
|
"@typescript/native-preview": "7.0.0-dev.20260217.1"
|