@remotion/studio-server 4.0.470 → 4.0.471

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 (28) hide show
  1. package/dist/codemods/add-effect.d.ts +15 -0
  2. package/dist/codemods/add-effect.js +231 -0
  3. package/dist/codemods/reorder-effect.d.ts +13 -0
  4. package/dist/codemods/reorder-effect.js +61 -0
  5. package/dist/codemods/update-keyframes/update-keyframes.d.ts +4 -0
  6. package/dist/codemods/update-keyframes/update-keyframes.js +25 -10
  7. package/dist/helpers/open-in-editor.d.ts +2 -2
  8. package/dist/helpers/open-in-editor.js +35 -2
  9. package/dist/helpers/resolve-composition-component.d.ts +15 -0
  10. package/dist/helpers/resolve-composition-component.js +269 -31
  11. package/dist/preview-server/api-routes.js +8 -4
  12. package/dist/preview-server/routes/add-effect-keyframe.js +2 -2
  13. package/dist/preview-server/routes/add-effect.d.ts +3 -0
  14. package/dist/preview-server/routes/add-effect.js +68 -0
  15. package/dist/preview-server/routes/add-sequence-keyframe.js +6 -3
  16. package/dist/preview-server/routes/can-update-sequence-props.d.ts +1 -0
  17. package/dist/preview-server/routes/can-update-sequence-props.js +15 -1
  18. package/dist/preview-server/routes/delete-keyframes.d.ts +13 -0
  19. package/dist/preview-server/routes/delete-keyframes.js +263 -0
  20. package/dist/preview-server/routes/insert-jsx-element.d.ts +3 -0
  21. package/dist/preview-server/routes/insert-jsx-element.js +79 -0
  22. package/dist/preview-server/routes/reorder-effect.d.ts +3 -0
  23. package/dist/preview-server/routes/reorder-effect.js +67 -0
  24. package/dist/preview-server/routes/subscribe-to-sequence-props.js +2 -1
  25. package/dist/preview-server/sequence-props-watchers.d.ts +2 -1
  26. package/dist/preview-server/sequence-props-watchers.js +22 -2
  27. package/dist/preview-server/undo-stack.d.ts +9 -1
  28. package/package.json +6 -6
@@ -0,0 +1,15 @@
1
+ import type { SequenceNodePath } from 'remotion';
2
+ export declare const addEffect: ({ input, sequenceNodePath, effectName, effectImportPath, effectConfig, prettierConfigOverride, }: {
3
+ input: string;
4
+ sequenceNodePath: SequenceNodePath;
5
+ effectName: string;
6
+ effectImportPath: string;
7
+ effectConfig: Record<string, unknown>;
8
+ prettierConfigOverride?: Record<string, unknown> | null | undefined;
9
+ }) => Promise<{
10
+ output: string;
11
+ formatted: boolean;
12
+ effectLabel: string;
13
+ nodeLabel: string;
14
+ logLine: number;
15
+ }>;
@@ -0,0 +1,231 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.addEffect = void 0;
37
+ const studio_shared_1 = require("@remotion/studio-shared");
38
+ const recast = __importStar(require("recast"));
39
+ const can_update_sequence_props_1 = require("../preview-server/routes/can-update-sequence-props");
40
+ const format_file_content_1 = require("./format-file-content");
41
+ const parse_ast_1 = require("./parse-ast");
42
+ const update_effect_props_1 = require("./update-effect-props/update-effect-props");
43
+ const b = recast.types.builders;
44
+ const identifierRegex = /^[A-Za-z_$][0-9A-Za-z_$]*$/;
45
+ const assertValidEffect = ({ effectName, effectImportPath, }) => {
46
+ if (!identifierRegex.test(effectName)) {
47
+ throw new Error(`Invalid effect name "${effectName}"`);
48
+ }
49
+ const allowedImport = effectImportPath.startsWith('@remotion/effects/') ||
50
+ effectImportPath === '@remotion/light-leaks' ||
51
+ effectImportPath === '@remotion/starburst';
52
+ if (!allowedImport) {
53
+ throw new Error(`Unsupported effect import "${effectImportPath}"`);
54
+ }
55
+ };
56
+ const parseValueExpression = (value) => {
57
+ const code = `a = ${(0, studio_shared_1.stringifyDefaultProps)({ props: value, enumPaths: [] })}`;
58
+ const ast = (0, parse_ast_1.parseAst)(code);
59
+ const stmt = ast.program.body[0];
60
+ if (stmt.type !== 'ExpressionStatement' ||
61
+ stmt.expression.type !== 'AssignmentExpression') {
62
+ throw new Error('Failed to parse effect config value');
63
+ }
64
+ return stmt.expression.right;
65
+ };
66
+ const getImportedName = (specifier) => {
67
+ if (specifier.imported.type === 'Identifier') {
68
+ return specifier.imported.name;
69
+ }
70
+ return specifier.imported.value;
71
+ };
72
+ const declarationBindsName = (declaration, name) => {
73
+ var _a, _b;
74
+ if (declaration.type === 'ClassDeclaration') {
75
+ return ((_a = declaration.id) === null || _a === void 0 ? void 0 : _a.name) === name;
76
+ }
77
+ if (declaration.type === 'FunctionDeclaration') {
78
+ return ((_b = declaration.id) === null || _b === void 0 ? void 0 : _b.name) === name;
79
+ }
80
+ return declaration.declarations.some((variableDeclaration) => {
81
+ return (variableDeclaration.id.type === 'Identifier' &&
82
+ variableDeclaration.id.name === name);
83
+ });
84
+ };
85
+ const hasTopLevelBinding = ({ ast, name }) => {
86
+ return ast.program.body.some((node) => {
87
+ var _a;
88
+ if (node.type === 'FunctionDeclaration' ||
89
+ node.type === 'ClassDeclaration' ||
90
+ node.type === 'VariableDeclaration') {
91
+ return declarationBindsName(node, name);
92
+ }
93
+ if (node.type === 'ExportNamedDeclaration' &&
94
+ node.declaration &&
95
+ (node.declaration.type === 'FunctionDeclaration' ||
96
+ node.declaration.type === 'ClassDeclaration' ||
97
+ node.declaration.type === 'VariableDeclaration')) {
98
+ return declarationBindsName(node.declaration, name);
99
+ }
100
+ if (node.type !== 'ImportDeclaration') {
101
+ return false;
102
+ }
103
+ return (_a = node.specifiers) === null || _a === void 0 ? void 0 : _a.some((specifier) => {
104
+ var _a;
105
+ return ((_a = specifier.local) === null || _a === void 0 ? void 0 : _a.name) === name;
106
+ });
107
+ });
108
+ };
109
+ const insertImportDeclaration = (ast, importDeclaration) => {
110
+ const { body } = ast.program;
111
+ let lastImportIndex = -1;
112
+ for (let i = 0; i < body.length; i++) {
113
+ if (body[i].type === 'ImportDeclaration') {
114
+ lastImportIndex = i;
115
+ }
116
+ }
117
+ body.splice(lastImportIndex + 1, 0, importDeclaration);
118
+ };
119
+ const getAvailableLocalName = ({ ast, effectName, }) => {
120
+ if (!hasTopLevelBinding({ ast, name: effectName })) {
121
+ return effectName;
122
+ }
123
+ const base = `${effectName}Effect`;
124
+ if (!hasTopLevelBinding({ ast, name: base })) {
125
+ return base;
126
+ }
127
+ for (let i = 2; i < 100; i++) {
128
+ const candidate = `${base}${i}`;
129
+ if (!hasTopLevelBinding({ ast, name: candidate })) {
130
+ return candidate;
131
+ }
132
+ }
133
+ throw new Error(`Cannot find a local name for ${effectName}`);
134
+ };
135
+ const ensureEffectImport = ({ ast, effectName, effectImportPath, }) => {
136
+ var _a, _b, _c;
137
+ var _d;
138
+ let importDeclaration = null;
139
+ for (const node of ast.program.body) {
140
+ if (node.type !== 'ImportDeclaration' ||
141
+ node.source.value !== effectImportPath) {
142
+ continue;
143
+ }
144
+ importDeclaration = node;
145
+ const matchingSpecifier = (_a = node.specifiers) === null || _a === void 0 ? void 0 : _a.find((importSpecifier) => {
146
+ return (importSpecifier.type === 'ImportSpecifier' &&
147
+ getImportedName(importSpecifier) === effectName);
148
+ });
149
+ if ((_b = matchingSpecifier === null || matchingSpecifier === void 0 ? void 0 : matchingSpecifier.local) === null || _b === void 0 ? void 0 : _b.name) {
150
+ return matchingSpecifier.local.name;
151
+ }
152
+ }
153
+ const localName = getAvailableLocalName({ ast, effectName });
154
+ const imported = b.identifier(effectName);
155
+ const local = localName === effectName ? null : b.identifier(localName);
156
+ const specifier = b.importSpecifier(imported, local);
157
+ if (importDeclaration &&
158
+ !((_c = importDeclaration.specifiers) === null || _c === void 0 ? void 0 : _c.some((importSpecifier) => importSpecifier.type === 'ImportNamespaceSpecifier'))) {
159
+ importDeclaration.specifiers = [
160
+ ...((_d = importDeclaration.specifiers) !== null && _d !== void 0 ? _d : []),
161
+ specifier,
162
+ ];
163
+ return localName;
164
+ }
165
+ const newImport = b.importDeclaration([], b.stringLiteral(effectImportPath));
166
+ newImport.specifiers = [specifier];
167
+ insertImportDeclaration(ast, newImport);
168
+ return localName;
169
+ };
170
+ const getEffectsArray = (attr) => {
171
+ if (!attr.value || attr.value.type !== 'JSXExpressionContainer') {
172
+ throw new Error('Cannot add effect: effects prop is not an array');
173
+ }
174
+ const expr = attr.value.expression;
175
+ if (expr.type !== 'ArrayExpression') {
176
+ throw new Error('Cannot add effect: effects prop is not an array');
177
+ }
178
+ return expr;
179
+ };
180
+ const makeEffectsAttr = (array) => {
181
+ return b.jsxAttribute(b.jsxIdentifier('effects'), b.jsxExpressionContainer(array));
182
+ };
183
+ const makeConfigObjectExpression = (config) => {
184
+ return b.objectExpression(Object.entries(config).map(([key, value]) => {
185
+ const keyNode = identifierRegex.test(key)
186
+ ? b.identifier(key)
187
+ : b.stringLiteral(key);
188
+ return b.objectProperty(keyNode, parseValueExpression(value));
189
+ }));
190
+ };
191
+ const getJsxTagLabel = (name) => {
192
+ if (name.type === 'JSXIdentifier') {
193
+ return `<${name.name}>`;
194
+ }
195
+ return 'element';
196
+ };
197
+ const addEffect = async ({ input, sequenceNodePath, effectName, effectImportPath, effectConfig, prettierConfigOverride, }) => {
198
+ var _a;
199
+ var _b, _c;
200
+ assertValidEffect({ effectName, effectImportPath });
201
+ const ast = (0, parse_ast_1.parseAst)(input);
202
+ const jsx = (0, can_update_sequence_props_1.findJsxElementAtNodePath)(ast, sequenceNodePath);
203
+ if (!jsx) {
204
+ throw new Error('Could not find a JSX element at the specified location to add effect');
205
+ }
206
+ const localName = ensureEffectImport({ ast, effectName, effectImportPath });
207
+ const effectCall = b.callExpression(b.identifier(localName), [
208
+ makeConfigObjectExpression(effectConfig),
209
+ ]);
210
+ const attr = (0, update_effect_props_1.findEffectsAttr)((_b = jsx.attributes) !== null && _b !== void 0 ? _b : []);
211
+ if (attr) {
212
+ getEffectsArray(attr).elements.push(effectCall);
213
+ }
214
+ else {
215
+ const effectsArray = b.arrayExpression([effectCall]);
216
+ jsx.attributes.push(makeEffectsAttr(effectsArray));
217
+ }
218
+ const finalFile = (0, parse_ast_1.serializeAst)(ast);
219
+ const { output, formatted } = await (0, format_file_content_1.formatFileContent)({
220
+ input: finalFile,
221
+ prettierConfigOverride,
222
+ });
223
+ return {
224
+ output,
225
+ formatted,
226
+ effectLabel: `${effectName}()`,
227
+ nodeLabel: getJsxTagLabel(jsx.name),
228
+ logLine: (_c = (_a = jsx.loc) === null || _a === void 0 ? void 0 : _a.start.line) !== null && _c !== void 0 ? _c : 1,
229
+ };
230
+ };
231
+ exports.addEffect = addEffect;
@@ -0,0 +1,13 @@
1
+ import type { SequenceNodePath } from 'remotion';
2
+ export declare const reorderEffect: ({ input, sequenceNodePath, fromIndex, toIndex, prettierConfigOverride, }: {
3
+ input: string;
4
+ sequenceNodePath: SequenceNodePath;
5
+ fromIndex: number;
6
+ toIndex: number;
7
+ prettierConfigOverride?: Record<string, unknown> | null | undefined;
8
+ }) => Promise<{
9
+ output: string;
10
+ formatted: boolean;
11
+ effectLabel: string;
12
+ logLine: number;
13
+ }>;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.reorderEffect = void 0;
4
+ const can_update_sequence_props_1 = require("../preview-server/routes/can-update-sequence-props");
5
+ const format_file_content_1 = require("./format-file-content");
6
+ const parse_ast_1 = require("./parse-ast");
7
+ const update_effect_props_1 = require("./update-effect-props/update-effect-props");
8
+ const getEffectsArray = (attr) => {
9
+ if (!attr.value || attr.value.type !== 'JSXExpressionContainer') {
10
+ throw new Error('Cannot reorder effect: effects prop is not an array');
11
+ }
12
+ const expr = attr.value.expression;
13
+ if (expr.type !== 'ArrayExpression') {
14
+ throw new Error('Cannot reorder effect: effects prop is not an array');
15
+ }
16
+ return expr;
17
+ };
18
+ const reorderEffect = async ({ input, sequenceNodePath, fromIndex, toIndex, prettierConfigOverride, }) => {
19
+ var _a, _b;
20
+ var _c, _d, _e;
21
+ const ast = (0, parse_ast_1.parseAst)(input);
22
+ const jsx = (0, can_update_sequence_props_1.findJsxElementAtNodePath)(ast, sequenceNodePath);
23
+ if (!jsx) {
24
+ throw new Error('Could not find a JSX element at the specified location to reorder effect');
25
+ }
26
+ const attr = (0, update_effect_props_1.findEffectsAttr)((_c = jsx.attributes) !== null && _c !== void 0 ? _c : []);
27
+ if (!attr) {
28
+ throw new Error('Could not find effects on the target JSX element');
29
+ }
30
+ const effectsArray = getEffectsArray(attr);
31
+ const elements = (0, update_effect_props_1.enumerateEffectArrayElements)(effectsArray);
32
+ if (fromIndex < 0 || fromIndex >= elements.length) {
33
+ throw new Error('Cannot reorder effect: source index not-found');
34
+ }
35
+ if (toIndex < 0 || toIndex >= elements.length) {
36
+ throw new Error('Cannot reorder effect: target index not-found');
37
+ }
38
+ const target = elements[fromIndex];
39
+ if (target.kind !== 'call') {
40
+ throw new Error('Cannot reorder effect: source effect is not-call-expression');
41
+ }
42
+ if (fromIndex !== toIndex) {
43
+ const [moved] = effectsArray.elements.splice(fromIndex, 1);
44
+ if (!moved) {
45
+ throw new Error('Cannot reorder effect: source effect is not-call-expression');
46
+ }
47
+ effectsArray.elements.splice(toIndex, 0, moved);
48
+ }
49
+ const finalFile = (0, parse_ast_1.serializeAst)(ast);
50
+ const { output, formatted } = await (0, format_file_content_1.formatFileContent)({
51
+ input: finalFile,
52
+ prettierConfigOverride,
53
+ });
54
+ return {
55
+ output,
56
+ formatted,
57
+ effectLabel: `${target.callee}()`,
58
+ logLine: (_e = (_d = (_a = target.node.loc) === null || _a === void 0 ? void 0 : _a.start.line) !== null && _d !== void 0 ? _d : (_b = jsx.loc) === null || _b === void 0 ? void 0 : _b.start.line) !== null && _e !== void 0 ? _e : 1,
59
+ };
60
+ };
61
+ exports.reorderEffect = reorderEffect;
@@ -28,6 +28,7 @@ export declare const updateSequenceKeyframesAst: ({ input, nodePath, updates, }:
28
28
  oldValueStrings: string[];
29
29
  newValueStrings: string[];
30
30
  logLine: number;
31
+ updatedNodePath: SequenceNodePath;
31
32
  };
32
33
  export declare const updateSequenceKeyframes: ({ input, nodePath, updates, prettierConfigOverride, }: {
33
34
  input: string;
@@ -40,6 +41,7 @@ export declare const updateSequenceKeyframes: ({ input, nodePath, updates, prett
40
41
  oldValueStrings: string[];
41
42
  newValueStrings: string[];
42
43
  logLine: number;
44
+ updatedNodePath: SequenceNodePath;
43
45
  }>;
44
46
  export declare const updateEffectKeyframesAst: ({ input, sequenceNodePath, effectIndex, updates, }: {
45
47
  input: string;
@@ -52,6 +54,7 @@ export declare const updateEffectKeyframesAst: ({ input, sequenceNodePath, effec
52
54
  newValueStrings: string[];
53
55
  logLine: number;
54
56
  effectCallee: string;
57
+ updatedSequenceNodePath: SequenceNodePath;
55
58
  };
56
59
  export declare const updateEffectKeyframes: ({ input, sequenceNodePath, effectIndex, updates, prettierConfigOverride, }: {
57
60
  input: string;
@@ -66,4 +69,5 @@ export declare const updateEffectKeyframes: ({ input, sequenceNodePath, effectIn
66
69
  newValueStrings: string[];
67
70
  logLine: number;
68
71
  effectCallee: string;
72
+ updatedSequenceNodePath: SequenceNodePath;
69
73
  }>;
@@ -169,13 +169,7 @@ const addKeyframe = ({ expression, frame, value, }) => {
169
169
  throw new Error('Cannot add keyframe to computed expression');
170
170
  }
171
171
  const staticValue = (0, can_update_sequence_props_1.extractStaticValue)(expression);
172
- const staticOutput = (0, update_nested_prop_1.parseValueExpression)(staticValue);
173
- const keyframes = frame === 0
174
- ? [{ frame, output: newOutput, value }]
175
- : [
176
- { frame: 0, output: staticOutput, value: staticValue },
177
- { frame, output: newOutput, value },
178
- ];
172
+ const keyframes = [{ frame, output: newOutput, value }];
179
173
  const callee = getInterpolationCalleeForValues({
180
174
  staticValue,
181
175
  newValue: value,
@@ -205,6 +199,9 @@ const removeKeyframe = ({ expression, frame, }) => {
205
199
  throw new Error(`Cannot remove keyframe at frame ${frame}: not found`);
206
200
  }
207
201
  const nextKeyframes = existing.keyframes.filter((_keyframe, index) => index !== keyframeIndex);
202
+ if (nextKeyframes.length === 0) {
203
+ return existing.keyframes[keyframeIndex].output;
204
+ }
208
205
  return createInterpolateExpression({
209
206
  callee: existing.callee,
210
207
  input: existing.input,
@@ -361,16 +358,21 @@ const updateSequenceKeyframesAst = ({ input, nodePath, updates, }) => {
361
358
  }
362
359
  }
363
360
  (0, ensure_imports_and_frame_hook_1.ensureRemotionImports)(ast, requiredImports);
361
+ const updatedNodePath = (0, can_update_sequence_props_1.findNodePathForJsxElement)(ast, node);
362
+ if (!updatedNodePath) {
363
+ throw new Error('Could not find updated JSX element location after updating keyframes');
364
+ }
364
365
  return {
365
366
  serialized: (0, parse_ast_1.serializeAst)(ast),
366
367
  oldValueStrings,
367
368
  newValueStrings,
368
369
  logLine: (_b = (_a = node.loc) === null || _a === void 0 ? void 0 : _a.start.line) !== null && _b !== void 0 ? _b : 1,
370
+ updatedNodePath,
369
371
  };
370
372
  };
371
373
  exports.updateSequenceKeyframesAst = updateSequenceKeyframesAst;
372
374
  const updateSequenceKeyframes = async ({ input, nodePath, updates, prettierConfigOverride, }) => {
373
- const { serialized, oldValueStrings, newValueStrings, logLine } = (0, exports.updateSequenceKeyframesAst)({
375
+ const { serialized, oldValueStrings, newValueStrings, logLine, updatedNodePath, } = (0, exports.updateSequenceKeyframesAst)({
374
376
  input,
375
377
  nodePath,
376
378
  updates,
@@ -379,7 +381,14 @@ const updateSequenceKeyframes = async ({ input, nodePath, updates, prettierConfi
379
381
  input: serialized,
380
382
  prettierConfigOverride,
381
383
  });
382
- return { output, formatted, oldValueStrings, newValueStrings, logLine };
384
+ return {
385
+ output,
386
+ formatted,
387
+ oldValueStrings,
388
+ newValueStrings,
389
+ logLine,
390
+ updatedNodePath,
391
+ };
383
392
  };
384
393
  exports.updateSequenceKeyframes = updateSequenceKeyframes;
385
394
  const updateEffectKeyframesAst = ({ input, sequenceNodePath, effectIndex, updates, }) => {
@@ -436,17 +445,22 @@ const updateEffectKeyframesAst = ({ input, sequenceNodePath, effectIndex, update
436
445
  }
437
446
  }
438
447
  (0, ensure_imports_and_frame_hook_1.ensureRemotionImports)(ast, requiredImports);
448
+ const updatedSequenceNodePath = (0, can_update_sequence_props_1.findNodePathForJsxElement)(ast, jsx);
449
+ if (!updatedSequenceNodePath) {
450
+ throw new Error('Could not find updated JSX element location after updating effect keyframes');
451
+ }
439
452
  return {
440
453
  serialized: (0, parse_ast_1.serializeAst)(ast),
441
454
  oldValueStrings,
442
455
  newValueStrings,
443
456
  logLine: (_e = (_d = (_a = call.loc) === null || _a === void 0 ? void 0 : _a.start.line) !== null && _d !== void 0 ? _d : (_b = jsx.loc) === null || _b === void 0 ? void 0 : _b.start.line) !== null && _e !== void 0 ? _e : 1,
444
457
  effectCallee,
458
+ updatedSequenceNodePath,
445
459
  };
446
460
  };
447
461
  exports.updateEffectKeyframesAst = updateEffectKeyframesAst;
448
462
  const updateEffectKeyframes = async ({ input, sequenceNodePath, effectIndex, updates, prettierConfigOverride, }) => {
449
- const { serialized, oldValueStrings, newValueStrings, logLine, effectCallee } = (0, exports.updateEffectKeyframesAst)({
463
+ const { serialized, oldValueStrings, newValueStrings, logLine, effectCallee, updatedSequenceNodePath, } = (0, exports.updateEffectKeyframesAst)({
450
464
  input,
451
465
  sequenceNodePath,
452
466
  effectIndex,
@@ -463,6 +477,7 @@ const updateEffectKeyframes = async ({ input, sequenceNodePath, effectIndex, upd
463
477
  newValueStrings,
464
478
  logLine,
465
479
  effectCallee,
480
+ updatedSequenceNodePath,
466
481
  };
467
482
  };
468
483
  exports.updateEffectKeyframes = updateEffectKeyframes;
@@ -5,8 +5,8 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
  import type { LogLevel } from '@remotion/renderer';
8
- declare const editorNames: readonly ["atom", "/Applications/Atom Beta.app/Contents/MacOS/Atom Beta", "brackets", "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl", "/Applications/Sublime Text Dev.app/Contents/SharedSupport/bin/subl", "/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl", "code", "code-insiders", "vscodium", "/Applications/AppCode.app/Contents/MacOS/appcode", "/Applications/CLion.app/Contents/MacOS/clion", "/Applications/IntelliJ IDEA.app/Contents/MacOS/idea", "/Applications/PhpStorm.app/Contents/MacOS/phpstorm", "/Applications/PyCharm.app/Contents/MacOS/pycharm", "/Applications/PyCharm CE.app/Contents/MacOS/pycharm", "/Applications/RubyMine.app/Contents/MacOS/rubymine", "/Applications/WebStorm.app/Contents/MacOS/webstorm", "/Applications/GoLand.app/Contents/MacOS/goland", "/Applications/Rider.app/Contents/MacOS/rider", "mvim", "emacs", "gvim", "idea", "phpstorm", "pycharm", "rubymine", "subl", "sublime_text", "vim", "webstorm", "goland", "rider", "Brackets.exe", "Code.exe", "Code - Insiders.exe", "VSCodium.exe", "atom.exe", "sublime_text.exe", "notepad++.exe", "clion.exe", "clion64.exe", "idea.exe", "idea64.exe", "phpstorm.exe", "phpstorm64.exe", "pycharm.exe", "pycharm64.exe", "rubymine.exe", "rubymine64.exe", "webstorm.exe", "webstorm64.exe", "goland.exe", "goland64.exe", "rider.exe", "rider64.exe", "nano", "cursor", "/Applications/Cursor.app/Contents/MacOS/Cursor", "Cursor.exe", "windsurf", "/Applications/Windsurf.app/Contents/MacOS/Windsurf", "Windsurf.exe", "zed"];
9
- export declare const getDisplayNameForEditor: (editor: "/Applications/AppCode.app/Contents/MacOS/appcode" | "/Applications/Atom Beta.app/Contents/MacOS/Atom Beta" | "/Applications/CLion.app/Contents/MacOS/clion" | "/Applications/Cursor.app/Contents/MacOS/Cursor" | "/Applications/GoLand.app/Contents/MacOS/goland" | "/Applications/IntelliJ IDEA.app/Contents/MacOS/idea" | "/Applications/PhpStorm.app/Contents/MacOS/phpstorm" | "/Applications/PyCharm CE.app/Contents/MacOS/pycharm" | "/Applications/PyCharm.app/Contents/MacOS/pycharm" | "/Applications/Rider.app/Contents/MacOS/rider" | "/Applications/RubyMine.app/Contents/MacOS/rubymine" | "/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl" | "/Applications/Sublime Text Dev.app/Contents/SharedSupport/bin/subl" | "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" | "/Applications/WebStorm.app/Contents/MacOS/webstorm" | "/Applications/Windsurf.app/Contents/MacOS/Windsurf" | "Brackets.exe" | "Code - Insiders.exe" | "Code.exe" | "Cursor.exe" | "VSCodium.exe" | "Windsurf.exe" | "atom" | "atom.exe" | "brackets" | "clion.exe" | "clion64.exe" | "code" | "code-insiders" | "cursor" | "emacs" | "goland" | "goland.exe" | "goland64.exe" | "gvim" | "idea" | "idea.exe" | "idea64.exe" | "mvim" | "nano" | "notepad++.exe" | "phpstorm" | "phpstorm.exe" | "phpstorm64.exe" | "pycharm" | "pycharm.exe" | "pycharm64.exe" | "rider" | "rider.exe" | "rider64.exe" | "rubymine" | "rubymine.exe" | "rubymine64.exe" | "subl" | "sublime_text" | "sublime_text.exe" | "vim" | "vscodium" | "webstorm" | "webstorm.exe" | "webstorm64.exe" | "windsurf" | "zed" | null) => string | null;
8
+ declare const editorNames: readonly ["atom", "/Applications/Atom Beta.app/Contents/MacOS/Atom Beta", "brackets", "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl", "/Applications/Sublime Text Dev.app/Contents/SharedSupport/bin/subl", "/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl", "code", "code-insiders", "vscodium", "/Applications/AppCode.app/Contents/MacOS/appcode", "/Applications/CLion.app/Contents/MacOS/clion", "/Applications/IntelliJ IDEA.app/Contents/MacOS/idea", "/Applications/PhpStorm.app/Contents/MacOS/phpstorm", "/Applications/PyCharm.app/Contents/MacOS/pycharm", "/Applications/PyCharm CE.app/Contents/MacOS/pycharm", "/Applications/RubyMine.app/Contents/MacOS/rubymine", "/Applications/WebStorm.app/Contents/MacOS/webstorm", "/Applications/GoLand.app/Contents/MacOS/goland", "/Applications/Rider.app/Contents/MacOS/rider", "mvim", "emacs", "gvim", "idea", "phpstorm", "pycharm", "rubymine", "subl", "sublime_text", "vim", "webstorm", "goland", "rider", "Brackets.exe", "Code.exe", "Code - Insiders.exe", "VSCodium.exe", "atom.exe", "sublime_text.exe", "notepad++.exe", "clion.exe", "clion64.exe", "idea.exe", "idea64.exe", "phpstorm.exe", "phpstorm64.exe", "pycharm.exe", "pycharm64.exe", "rubymine.exe", "rubymine64.exe", "webstorm.exe", "webstorm64.exe", "goland.exe", "goland64.exe", "rider.exe", "rider64.exe", "nano", "cursor", "/Applications/Cursor.app/Contents/MacOS/Cursor", "Cursor.exe", "windsurf", "/Applications/Windsurf.app/Contents/MacOS/Windsurf", "Windsurf.exe", "zed", "zedit", "zeditor", "zed-editor", "/Applications/Zed.app/Contents/MacOS/zed", "/Applications/Zed.app/Contents/MacOS/cli", "/Applications/Zed Preview.app/Contents/MacOS/zed", "/Applications/Zed Preview.app/Contents/MacOS/cli", "/Applications/Zed Preview.app/Contents/MacOS/Zed Preview", "Zed.exe"];
9
+ export declare const getDisplayNameForEditor: (editor: "/Applications/AppCode.app/Contents/MacOS/appcode" | "/Applications/Atom Beta.app/Contents/MacOS/Atom Beta" | "/Applications/CLion.app/Contents/MacOS/clion" | "/Applications/Cursor.app/Contents/MacOS/Cursor" | "/Applications/GoLand.app/Contents/MacOS/goland" | "/Applications/IntelliJ IDEA.app/Contents/MacOS/idea" | "/Applications/PhpStorm.app/Contents/MacOS/phpstorm" | "/Applications/PyCharm CE.app/Contents/MacOS/pycharm" | "/Applications/PyCharm.app/Contents/MacOS/pycharm" | "/Applications/Rider.app/Contents/MacOS/rider" | "/Applications/RubyMine.app/Contents/MacOS/rubymine" | "/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl" | "/Applications/Sublime Text Dev.app/Contents/SharedSupport/bin/subl" | "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" | "/Applications/WebStorm.app/Contents/MacOS/webstorm" | "/Applications/Windsurf.app/Contents/MacOS/Windsurf" | "/Applications/Zed Preview.app/Contents/MacOS/Zed Preview" | "/Applications/Zed Preview.app/Contents/MacOS/cli" | "/Applications/Zed Preview.app/Contents/MacOS/zed" | "/Applications/Zed.app/Contents/MacOS/cli" | "/Applications/Zed.app/Contents/MacOS/zed" | "Brackets.exe" | "Code - Insiders.exe" | "Code.exe" | "Cursor.exe" | "VSCodium.exe" | "Windsurf.exe" | "Zed.exe" | "atom" | "atom.exe" | "brackets" | "clion.exe" | "clion64.exe" | "code" | "code-insiders" | "cursor" | "emacs" | "goland" | "goland.exe" | "goland64.exe" | "gvim" | "idea" | "idea.exe" | "idea64.exe" | "mvim" | "nano" | "notepad++.exe" | "phpstorm" | "phpstorm.exe" | "phpstorm64.exe" | "pycharm" | "pycharm.exe" | "pycharm64.exe" | "rider" | "rider.exe" | "rider64.exe" | "rubymine" | "rubymine.exe" | "rubymine64.exe" | "subl" | "sublime_text" | "sublime_text.exe" | "vim" | "vscodium" | "webstorm" | "webstorm.exe" | "webstorm64.exe" | "windsurf" | "zed" | "zed-editor" | "zedit" | "zeditor" | null) => string | null;
10
10
  type Editor = (typeof editorNames)[number];
11
11
  type ProcessAndCommand = {
12
12
  process: string;
@@ -136,6 +136,15 @@ const editorNames = [
136
136
  '/Applications/Windsurf.app/Contents/MacOS/Windsurf',
137
137
  'Windsurf.exe',
138
138
  'zed',
139
+ 'zedit',
140
+ 'zeditor',
141
+ 'zed-editor',
142
+ '/Applications/Zed.app/Contents/MacOS/zed',
143
+ '/Applications/Zed.app/Contents/MacOS/cli',
144
+ '/Applications/Zed Preview.app/Contents/MacOS/zed',
145
+ '/Applications/Zed Preview.app/Contents/MacOS/cli',
146
+ '/Applications/Zed Preview.app/Contents/MacOS/Zed Preview',
147
+ 'Zed.exe',
139
148
  ];
140
149
  const displayNameForEditor = {
141
150
  '/Applications/AppCode.app/Contents/MacOS/appcode': 'AppCode',
@@ -159,6 +168,7 @@ const displayNameForEditor = {
159
168
  'Code.exe': 'VS Code',
160
169
  'Cursor.exe': 'Cursor',
161
170
  'Windsurf.exe': 'Windsurf',
171
+ 'Zed.exe': 'Zed',
162
172
  'VSCodium.exe': 'VS Codium',
163
173
  'atom.exe': 'Atom',
164
174
  'clion.exe': 'CLion',
@@ -186,6 +196,14 @@ const displayNameForEditor = {
186
196
  cursor: 'Cursor',
187
197
  windsurf: 'Windsurf',
188
198
  zed: 'Zed',
199
+ zedit: 'Zed',
200
+ zeditor: 'Zed',
201
+ 'zed-editor': 'Zed',
202
+ '/Applications/Zed.app/Contents/MacOS/zed': 'Zed',
203
+ '/Applications/Zed.app/Contents/MacOS/cli': 'Zed',
204
+ '/Applications/Zed Preview.app/Contents/MacOS/zed': 'Zed Preview',
205
+ '/Applications/Zed Preview.app/Contents/MacOS/cli': 'Zed Preview',
206
+ '/Applications/Zed Preview.app/Contents/MacOS/Zed Preview': 'Zed Preview',
189
207
  emacs: 'emacs',
190
208
  goland: 'GoLand',
191
209
  gvim: 'GVim',
@@ -228,6 +246,9 @@ const COMMON_EDITORS_OSX = {
228
246
  '/Applications/VSCodium.app/Contents/MacOS/Electron': 'vscodium',
229
247
  '/Applications/Cursor.app/Contents/MacOS/Cursor': 'cursor',
230
248
  '/Applications/Windsurf.app/Contents/MacOS/Electron': 'windsurf',
249
+ '/Applications/Zed.app/Contents/MacOS/zed': '/Applications/Zed.app/Contents/MacOS/cli',
250
+ '/Applications/Zed Preview.app/Contents/MacOS/zed': '/Applications/Zed Preview.app/Contents/MacOS/cli',
251
+ '/Applications/Zed Preview.app/Contents/MacOS/Zed Preview': '/Applications/Zed Preview.app/Contents/MacOS/cli',
231
252
  '/Applications/AppCode.app/Contents/MacOS/appcode': '/Applications/AppCode.app/Contents/MacOS/appcode',
232
253
  '/Applications/CLion.app/Contents/MacOS/clion': '/Applications/CLion.app/Contents/MacOS/clion',
233
254
  '/Applications/IntelliJ IDEA.app/Contents/MacOS/idea': '/Applications/IntelliJ IDEA.app/Contents/MacOS/idea',
@@ -248,6 +269,9 @@ const COMMON_EDITORS_LINUX = {
248
269
  cursor: 'cursor',
249
270
  windsurf: 'windsurf',
250
271
  zed: 'zed',
272
+ zedit: 'zedit',
273
+ zeditor: 'zeditor',
274
+ 'zed-editor': 'zed-editor',
251
275
  vscodium: 'vscodium',
252
276
  emacs: 'emacs',
253
277
  gvim: 'gvim',
@@ -268,6 +292,7 @@ const COMMON_EDITORS_WIN = [
268
292
  'VSCodium.exe',
269
293
  'Cursor.exe',
270
294
  'Windsurf.exe',
295
+ 'Zed.exe',
271
296
  'atom.exe',
272
297
  'sublime_text.exe',
273
298
  'notepad++.exe',
@@ -294,7 +319,17 @@ const COMMON_EDITORS_WIN = [
294
319
  const WINDOWS_FILE_NAME_WHITELIST = /^([A-Za-z]:[/\\])?(?:[\x2D-9A-Z\\_a-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEF\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7B9\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDF00-\uDF1C\uDF27\uDF30-\uDF45]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF1A]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFF1]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D])+$/;
295
320
  function getArgumentsForLineNumber(editor, fileName, lineNumber, colNumber) {
296
321
  const editorBasename = node_path_1.default.basename(editor).replace(/\.(exe|cmd|bat)$/i, '');
322
+ const isZedEditor = editor === 'zed' ||
323
+ editor === 'zedit' ||
324
+ editor === 'zeditor' ||
325
+ editor === 'zed-editor' ||
326
+ editor === 'Zed.exe' ||
327
+ editor.endsWith('/Zed.app/Contents/MacOS/cli') ||
328
+ editor.endsWith('/Zed Preview.app/Contents/MacOS/cli');
297
329
  const isFolder = node_fs_1.default.existsSync(fileName) && node_fs_1.default.lstatSync(fileName).isDirectory();
330
+ if (isZedEditor) {
331
+ return [fileName + ':' + lineNumber + ':' + colNumber];
332
+ }
298
333
  switch (editorBasename) {
299
334
  case 'atom':
300
335
  case 'Atom':
@@ -333,8 +368,6 @@ function getArgumentsForLineNumber(editor, fileName, lineNumber, colNumber) {
333
368
  case 'windsurf':
334
369
  case 'Windsurf':
335
370
  return ['-g', fileName + ':' + lineNumber + ':' + colNumber];
336
- case 'zed':
337
- return ['--new', fileName + ':' + lineNumber + ':' + colNumber];
338
371
  case 'appcode':
339
372
  case 'clion':
340
373
  case 'clion64':
@@ -1,3 +1,4 @@
1
+ import type { InsertableCompositionElement } from '@remotion/studio-shared';
1
2
  export type ResolvedCompositionComponent = {
2
3
  source: string;
3
4
  line: number;
@@ -9,3 +10,17 @@ export declare const resolveCompositionComponent: ({ remotionRoot, compositionFi
9
10
  compositionFile: string;
10
11
  compositionId: string;
11
12
  }) => Promise<ResolvedCompositionComponent>;
13
+ export declare const insertJsxElementIntoComposition: ({ remotionRoot, compositionFile, compositionId, element, prettierConfigOverride, }: {
14
+ remotionRoot: string;
15
+ compositionFile: string;
16
+ compositionId: string;
17
+ element: InsertableCompositionElement;
18
+ prettierConfigOverride: Record<string, unknown> | null;
19
+ }) => Promise<{
20
+ fileName: string;
21
+ source: string;
22
+ oldContents: string;
23
+ output: string;
24
+ formatted: boolean;
25
+ logLine: number;
26
+ }>;