@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.
- package/dist/codemods/add-effect.d.ts +15 -0
- package/dist/codemods/add-effect.js +231 -0
- package/dist/codemods/reorder-effect.d.ts +13 -0
- package/dist/codemods/reorder-effect.js +61 -0
- package/dist/codemods/update-keyframes/update-keyframes.d.ts +4 -0
- package/dist/codemods/update-keyframes/update-keyframes.js +25 -10
- package/dist/helpers/open-in-editor.d.ts +2 -2
- package/dist/helpers/open-in-editor.js +35 -2
- package/dist/helpers/resolve-composition-component.d.ts +15 -0
- package/dist/helpers/resolve-composition-component.js +269 -31
- package/dist/preview-server/api-routes.js +8 -4
- package/dist/preview-server/routes/add-effect-keyframe.js +2 -2
- package/dist/preview-server/routes/add-effect.d.ts +3 -0
- package/dist/preview-server/routes/add-effect.js +68 -0
- package/dist/preview-server/routes/add-sequence-keyframe.js +6 -3
- package/dist/preview-server/routes/can-update-sequence-props.d.ts +1 -0
- package/dist/preview-server/routes/can-update-sequence-props.js +15 -1
- package/dist/preview-server/routes/delete-keyframes.d.ts +13 -0
- package/dist/preview-server/routes/delete-keyframes.js +263 -0
- package/dist/preview-server/routes/insert-jsx-element.d.ts +3 -0
- package/dist/preview-server/routes/insert-jsx-element.js +79 -0
- package/dist/preview-server/routes/reorder-effect.d.ts +3 -0
- package/dist/preview-server/routes/reorder-effect.js +67 -0
- package/dist/preview-server/routes/subscribe-to-sequence-props.js +2 -1
- package/dist/preview-server/sequence-props-watchers.d.ts +2 -1
- package/dist/preview-server/sequence-props-watchers.js +22 -2
- package/dist/preview-server/undo-stack.d.ts +9 -1
- 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
|
|
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 {
|
|
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
|
+
}>;
|