@remotion/studio-server 4.0.529 → 4.0.530
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-composition-to-file.d.ts +7 -0
- package/dist/codemods/add-composition-to-file.js +63 -0
- package/dist/codemods/apply-codemod-to-file.js +6 -1
- package/dist/codemods/update-keyframes/update-keyframes.d.ts +3 -3
- package/dist/codemods/update-keyframes/update-keyframes.js +1 -1
- package/dist/codemods/update-sequence-props/update-sequence-props.js +1 -1
- package/dist/helpers/get-local-package-override.d.ts +5 -0
- package/dist/helpers/get-local-package-override.js +39 -0
- package/dist/helpers/resolve-composition-component.d.ts +2 -1
- package/dist/helpers/resolve-composition-component.js +66 -15
- package/dist/index.d.ts +5 -0
- package/dist/index.js +3 -0
- package/dist/preview-server/api-routes.js +32 -12
- package/dist/preview-server/element-install-state.js +10 -2
- package/dist/preview-server/routes/add-composition.d.ts +3 -0
- package/dist/preview-server/routes/add-composition.js +97 -0
- package/dist/preview-server/routes/add-folder.d.ts +3 -0
- package/dist/preview-server/routes/add-folder.js +107 -0
- package/dist/preview-server/routes/add-keyframes.d.ts +2 -2
- package/dist/preview-server/routes/add-keyframes.js +49 -6
- package/dist/preview-server/routes/can-update-sequence-props.js +27 -5
- package/dist/preview-server/routes/delete-composition.d.ts +3 -0
- package/dist/preview-server/routes/delete-composition.js +104 -0
- package/dist/preview-server/routes/delete-nodes.d.ts +3 -0
- package/dist/preview-server/routes/delete-nodes.js +142 -0
- package/dist/preview-server/routes/duplicate-composition.d.ts +3 -0
- package/dist/preview-server/routes/duplicate-composition.js +114 -0
- package/dist/preview-server/routes/duplicate-nodes.d.ts +3 -0
- package/dist/preview-server/routes/duplicate-nodes.js +123 -0
- package/dist/preview-server/routes/insert-basic-captions.js +2 -1
- package/dist/preview-server/routes/insert-composition-element.d.ts +3 -0
- package/dist/preview-server/routes/insert-composition-element.js +236 -0
- package/dist/preview-server/routes/insert-element.js +26 -19
- package/dist/preview-server/routes/install-dependency.js +10 -1
- package/dist/preview-server/routes/move-composition.d.ts +3 -0
- package/dist/preview-server/routes/move-composition.js +148 -0
- package/dist/preview-server/routes/move-folder.d.ts +3 -0
- package/dist/preview-server/routes/move-folder.js +151 -0
- package/dist/preview-server/routes/precompose-jsx-nodes.d.ts +3 -0
- package/dist/preview-server/routes/precompose-jsx-nodes.js +209 -0
- package/dist/preview-server/routes/rename-composition.d.ts +3 -0
- package/dist/preview-server/routes/rename-composition.js +105 -0
- package/dist/preview-server/routes/rename-folder.d.ts +3 -0
- package/dist/preview-server/routes/rename-folder.js +111 -0
- package/dist/preview-server/routes/reorder-sequence.js +7 -2
- package/dist/preview-server/routes/replace-video-source.js +7 -2
- package/dist/preview-server/routes/save-sequence-props.js +6 -3
- package/dist/preview-server/routes/split-sequences.d.ts +3 -0
- package/dist/preview-server/routes/split-sequences.js +122 -0
- package/dist/preview-server/routes/split-video-from-audio.js +6 -1
- package/dist/preview-server/routes/unwrap-folder.d.ts +3 -0
- package/dist/preview-server/routes/unwrap-folder.js +107 -0
- package/dist/preview-server/routes/update-composition-metadata.d.ts +3 -0
- package/dist/preview-server/routes/update-composition-metadata.js +110 -0
- package/dist/preview-server/routes/wrap-node.d.ts +3 -0
- package/dist/preview-server/routes/wrap-node.js +108 -0
- package/dist/preview-server/studio-protocol/handle-discovery.js +3 -10
- package/dist/preview-server/studio-protocol/handle-install.js +0 -3
- package/dist/preview-server/undo-stack.d.ts +1 -1
- package/dist/preview-server/undo-stack.js +6 -0
- package/dist/start-studio.js +1 -1
- package/package.json +8 -8
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type CodemodResult } from '@remotion/codemods';
|
|
2
|
+
import type { NewCompositionOptions } from '@remotion/studio-shared';
|
|
3
|
+
export declare const addCompositionToFile: ({ filePath, options, remotionRoot, }: {
|
|
4
|
+
filePath: string;
|
|
5
|
+
options: NewCompositionOptions;
|
|
6
|
+
remotionRoot: string;
|
|
7
|
+
}) => Promise<CodemodResult>;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.addCompositionToFile = void 0;
|
|
7
|
+
const node_fs_1 = require("node:fs");
|
|
8
|
+
const promises_1 = require("node:fs/promises");
|
|
9
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
+
const codemods_1 = require("@remotion/codemods");
|
|
11
|
+
const studio_shared_1 = require("@remotion/studio-shared");
|
|
12
|
+
const can_update_default_props_1 = require("../preview-server/routes/can-update-default-props");
|
|
13
|
+
const addCompositionToFile = async ({ filePath, options, remotionRoot, }) => {
|
|
14
|
+
(0, can_update_default_props_1.checkIfTypeScriptFile)(filePath);
|
|
15
|
+
const input = await (0, promises_1.readFile)(filePath, 'utf-8');
|
|
16
|
+
const componentFilePath = node_path_1.default.join(node_path_1.default.dirname(filePath), `${options.componentName}.tsx`);
|
|
17
|
+
if ((0, node_fs_1.existsSync)(componentFilePath)) {
|
|
18
|
+
throw new Error(`Cannot create ${node_path_1.default.relative(remotionRoot, componentFilePath)} because it already exists`);
|
|
19
|
+
}
|
|
20
|
+
const composition = {
|
|
21
|
+
project: { files: { [filePath]: input }, rootDir: node_path_1.default.dirname(filePath) },
|
|
22
|
+
compositionFile: filePath,
|
|
23
|
+
compositionId: options.newId,
|
|
24
|
+
component: {
|
|
25
|
+
filePath: componentFilePath,
|
|
26
|
+
importName: options.componentName,
|
|
27
|
+
importPath: options.componentImportPath,
|
|
28
|
+
},
|
|
29
|
+
metadata: {
|
|
30
|
+
width: options.newWidth,
|
|
31
|
+
height: options.newHeight,
|
|
32
|
+
fps: options.newFps,
|
|
33
|
+
durationInFrames: options.newDurationInFrames,
|
|
34
|
+
},
|
|
35
|
+
folder: options.folderName === null
|
|
36
|
+
? undefined
|
|
37
|
+
: { name: options.folderName, parentName: options.parentName },
|
|
38
|
+
};
|
|
39
|
+
if (options.canvasCapture !== null) {
|
|
40
|
+
return (0, codemods_1.addCanvasCaptureComposition)({
|
|
41
|
+
...composition,
|
|
42
|
+
capture: options.canvasCapture,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
const result = (0, codemods_1.addComposition)(composition);
|
|
46
|
+
return {
|
|
47
|
+
...result,
|
|
48
|
+
changes: [
|
|
49
|
+
...result.changes,
|
|
50
|
+
{
|
|
51
|
+
filePath: componentFilePath,
|
|
52
|
+
previousContents: null,
|
|
53
|
+
nextContents: options.asset === null
|
|
54
|
+
? (0, studio_shared_1.emptyCompositionComponent)(options.componentName)
|
|
55
|
+
: (0, studio_shared_1.assetCompositionComponent)({
|
|
56
|
+
asset: options.asset,
|
|
57
|
+
componentName: options.componentName,
|
|
58
|
+
}),
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
exports.addCompositionToFile = addCompositionToFile;
|
|
@@ -78,7 +78,12 @@ const applyCodemodToFile = async ({ filePath, codeMod, }) => {
|
|
|
78
78
|
{
|
|
79
79
|
filePath: componentFilePath,
|
|
80
80
|
previousContents: null,
|
|
81
|
-
nextContents:
|
|
81
|
+
nextContents: codeMod.asset === null
|
|
82
|
+
? (0, studio_shared_1.emptyCompositionComponent)(codeMod.componentName)
|
|
83
|
+
: (0, studio_shared_1.assetCompositionComponent)({
|
|
84
|
+
asset: codeMod.asset,
|
|
85
|
+
componentName: codeMod.componentName,
|
|
86
|
+
}),
|
|
82
87
|
},
|
|
83
88
|
],
|
|
84
89
|
};
|
|
@@ -12,13 +12,13 @@ export declare const updateSequenceKeyframes: ({ input, nodePath, videoConfigVal
|
|
|
12
12
|
nodePath: SequenceNodePath;
|
|
13
13
|
}) => Promise<{
|
|
14
14
|
changes: import("@remotion/codemods").CodemodFileChange[];
|
|
15
|
-
nodePathRemappings: import("@remotion/codemods").
|
|
15
|
+
nodePathRemappings: import("@remotion/codemods").NodePathRemapping[];
|
|
16
16
|
formatted: boolean;
|
|
17
17
|
oldValueStrings: string[];
|
|
18
18
|
newValueStrings: string[];
|
|
19
19
|
logLine: number;
|
|
20
20
|
updatedNodePath: SequenceNodePath;
|
|
21
|
-
updatedNode: import("@remotion/codemods").
|
|
21
|
+
updatedNode: import("@remotion/codemods").NodeReference;
|
|
22
22
|
output: string;
|
|
23
23
|
}>;
|
|
24
24
|
export declare const updateEffectKeyframes: ({ input, sequenceNodePath, effectIndex, videoConfigValues, ...options }: KeyframeInput & {
|
|
@@ -26,7 +26,7 @@ export declare const updateEffectKeyframes: ({ input, sequenceNodePath, effectIn
|
|
|
26
26
|
effectIndex: number;
|
|
27
27
|
}) => Promise<{
|
|
28
28
|
changes: import("@remotion/codemods").CodemodFileChange[];
|
|
29
|
-
nodePathRemappings: import("@remotion/codemods").
|
|
29
|
+
nodePathRemappings: import("@remotion/codemods").NodePathRemapping[];
|
|
30
30
|
formatted: boolean;
|
|
31
31
|
oldValueStrings: string[];
|
|
32
32
|
newValueStrings: string[];
|
|
@@ -5,7 +5,7 @@ const codemods_1 = require("@remotion/codemods");
|
|
|
5
5
|
const updateSequenceKeyframes = async ({ input, nodePath, videoConfigValues, ...options }) => {
|
|
6
6
|
var _a;
|
|
7
7
|
var _b;
|
|
8
|
-
const result = await (0, codemods_1.
|
|
8
|
+
const result = await (0, codemods_1.updateNodeKeyframes)({
|
|
9
9
|
project: { files: { 'source.tsx': input }, rootDir: '/' },
|
|
10
10
|
node: { filePath: 'source.tsx', nodePath },
|
|
11
11
|
videoConfig: videoConfigValues !== null && videoConfigValues !== void 0 ? videoConfigValues : undefined,
|
|
@@ -6,7 +6,7 @@ const updateMultipleSequenceProps = ({ input, changes, prettierConfigOverride, }
|
|
|
6
6
|
return Promise.resolve().then(() => {
|
|
7
7
|
var _a;
|
|
8
8
|
var _b;
|
|
9
|
-
const result = (0, codemods_1.
|
|
9
|
+
const result = (0, codemods_1.updateMultipleNodeProps)({
|
|
10
10
|
project: { files: { 'source.tsx': input }, rootDir: '/' },
|
|
11
11
|
changes: changes.map(({ nodePath, updates, schema, videoConfigValues }) => ({
|
|
12
12
|
node: { filePath: 'source.tsx', nodePath },
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getLocalPackageOverride = exports.localPackageRootKey = void 0;
|
|
7
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const node_url_1 = require("node:url");
|
|
10
|
+
exports.localPackageRootKey = '_remotionInternalPackageRoot';
|
|
11
|
+
const getLocalPackageOverride = ({ remotionRoot, packageName, }) => {
|
|
12
|
+
const packageJsonPath = node_path_1.default.join(remotionRoot, 'package.json');
|
|
13
|
+
if (!node_fs_1.default.existsSync(packageJsonPath)) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
const packageJson = JSON.parse(node_fs_1.default.readFileSync(packageJsonPath, 'utf-8'));
|
|
17
|
+
const localPackageRoot = packageJson[exports.localPackageRootKey];
|
|
18
|
+
if (typeof localPackageRoot !== 'string') {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
const packagesRoot = node_path_1.default.join(localPackageRoot, 'packages');
|
|
22
|
+
if (!node_fs_1.default.existsSync(packagesRoot)) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
for (const directory of node_fs_1.default.readdirSync(packagesRoot)) {
|
|
26
|
+
const packageDirectory = node_path_1.default.join(packagesRoot, directory);
|
|
27
|
+
const candidatePackageJsonPath = node_path_1.default.join(packageDirectory, 'package.json');
|
|
28
|
+
if (!node_fs_1.default.existsSync(candidatePackageJsonPath)) {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
const candidatePackageJson = JSON.parse(node_fs_1.default.readFileSync(candidatePackageJsonPath, 'utf-8'));
|
|
32
|
+
if (candidatePackageJson.name === packageName &&
|
|
33
|
+
!candidatePackageJson.private) {
|
|
34
|
+
return (0, node_url_1.pathToFileURL)(packageDirectory).href;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
};
|
|
39
|
+
exports.getLocalPackageOverride = getLocalPackageOverride;
|
|
@@ -12,12 +12,13 @@ export declare const resolveCompositionComponent: ({ remotionRoot, compositionFi
|
|
|
12
12
|
compositionFile: string;
|
|
13
13
|
compositionId: string;
|
|
14
14
|
}) => Promise<ResolvedCompositionComponent>;
|
|
15
|
-
export declare const insertJsxElementIntoComposition: ({ remotionRoot, compositionFile, compositionId, element, from, prettierConfigOverride, wrapInSequence, sourceFileOverrides, }: {
|
|
15
|
+
export declare const insertJsxElementIntoComposition: ({ remotionRoot, compositionFile, compositionId, element, from, premountFor, prettierConfigOverride, wrapInSequence, sourceFileOverrides, }: {
|
|
16
16
|
remotionRoot: string;
|
|
17
17
|
compositionFile: string;
|
|
18
18
|
compositionId: string;
|
|
19
19
|
element: InsertableCompositionElement;
|
|
20
20
|
from: number | null;
|
|
21
|
+
premountFor: number | null;
|
|
21
22
|
prettierConfigOverride: Record<string, unknown> | null;
|
|
22
23
|
wrapInSequence?: {
|
|
23
24
|
dimensions: {
|
|
@@ -8,7 +8,7 @@ const node_fs_1 = __importDefault(require("node:fs"));
|
|
|
8
8
|
const node_path_1 = __importDefault(require("node:path"));
|
|
9
9
|
const codemods_1 = require("@remotion/codemods");
|
|
10
10
|
const svg_to_jsx_1 = require("./svg-to-jsx");
|
|
11
|
-
const { insertJsxElementIntoComposition: insertJsxElementIntoCompositionCodemod, resolveCompositionComponent: resolveCompositionComponentCodemod, resolveCompositionComponentWithFile: resolveCompositionComponentWithFileCodemod, } = codemods_1.CodemodsInternals;
|
|
11
|
+
const { createElementFromInsertable, insertJsxElementIntoComposition: insertJsxElementIntoCompositionCodemod, resolveCompositionComponent: resolveCompositionComponentCodemod, resolveCompositionComponentWithFile: resolveCompositionComponentWithFileCodemod, } = codemods_1.CodemodsInternals;
|
|
12
12
|
const makeCodemodEnvironment = (remotionRoot, sourceFileOverrides) => ({
|
|
13
13
|
dirname: node_path_1.default.dirname,
|
|
14
14
|
extname: node_path_1.default.extname,
|
|
@@ -40,24 +40,75 @@ const resolveCompositionComponent = ({ remotionRoot, compositionFile, compositio
|
|
|
40
40
|
environment: makeCodemodEnvironment(remotionRoot, null),
|
|
41
41
|
});
|
|
42
42
|
exports.resolveCompositionComponent = resolveCompositionComponent;
|
|
43
|
-
const insertJsxElementIntoComposition = ({ remotionRoot, compositionFile, compositionId, element, from, prettierConfigOverride, wrapInSequence = null, sourceFileOverrides, }) => {
|
|
43
|
+
const insertJsxElementIntoComposition = async ({ remotionRoot, compositionFile, compositionId, element, from, premountFor, prettierConfigOverride, wrapInSequence = null, sourceFileOverrides, }) => {
|
|
44
44
|
var _a;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
var _b, _c;
|
|
46
|
+
const environment = makeCodemodEnvironment(remotionRoot, sourceFileOverrides);
|
|
47
|
+
const sequence = wrapInSequence === null
|
|
48
|
+
? null
|
|
49
|
+
: {
|
|
50
|
+
dimensions: wrapInSequence.dimensions,
|
|
51
|
+
durationInFrames: (_b = wrapInSequence.durationInFrames) !== null && _b !== void 0 ? _b : null,
|
|
52
|
+
from: wrapInSequence.from,
|
|
53
|
+
name: wrapInSequence.name,
|
|
54
|
+
position: wrapInSequence.position,
|
|
55
|
+
};
|
|
56
|
+
// SVG markup and compositions need the file-system aware pipeline.
|
|
57
|
+
if (element.type === 'svg' || element.type === 'composition') {
|
|
58
|
+
return insertJsxElementIntoCompositionCodemod({
|
|
59
|
+
compositionFile,
|
|
60
|
+
compositionId,
|
|
61
|
+
element,
|
|
62
|
+
environment,
|
|
63
|
+
from,
|
|
64
|
+
premountFor,
|
|
65
|
+
prettierConfigOverride,
|
|
66
|
+
wrapInSequence: sequence,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
const codemodElement = createElementFromInsertable({
|
|
48
70
|
element,
|
|
49
|
-
environment: makeCodemodEnvironment(remotionRoot, sourceFileOverrides),
|
|
50
71
|
from,
|
|
72
|
+
premountFor,
|
|
73
|
+
wrapInSequence: sequence,
|
|
74
|
+
});
|
|
75
|
+
const location = await resolveCompositionComponentWithFileCodemod({
|
|
76
|
+
compositionFile,
|
|
77
|
+
compositionId,
|
|
78
|
+
environment,
|
|
79
|
+
});
|
|
80
|
+
if (!location.canAddSequence) {
|
|
81
|
+
throw new Error('Cannot insert JSX element into this composition component');
|
|
82
|
+
}
|
|
83
|
+
const oldContents = await environment.readFile(location.fileName);
|
|
84
|
+
const project = {
|
|
85
|
+
rootDir: remotionRoot,
|
|
86
|
+
files: { [location.fileName]: oldContents },
|
|
87
|
+
};
|
|
88
|
+
const result = (0, codemods_1.addElement)({
|
|
89
|
+
project,
|
|
90
|
+
element: codemodElement,
|
|
91
|
+
target: {
|
|
92
|
+
type: 'component',
|
|
93
|
+
filePath: location.fileName,
|
|
94
|
+
exportName: location.exportName,
|
|
95
|
+
},
|
|
51
96
|
prettierConfigOverride,
|
|
52
|
-
wrapInSequence: wrapInSequence === null
|
|
53
|
-
? null
|
|
54
|
-
: {
|
|
55
|
-
dimensions: wrapInSequence.dimensions,
|
|
56
|
-
durationInFrames: (_a = wrapInSequence.durationInFrames) !== null && _a !== void 0 ? _a : null,
|
|
57
|
-
from: wrapInSequence.from,
|
|
58
|
-
name: wrapInSequence.name,
|
|
59
|
-
position: wrapInSequence.position,
|
|
60
|
-
},
|
|
61
97
|
});
|
|
98
|
+
const nextProject = (0, codemods_1.applyCodemodChanges)(project, result.changes);
|
|
99
|
+
const insertedNode = (0, codemods_1.getNodes)({
|
|
100
|
+
project: nextProject,
|
|
101
|
+
filePath: location.fileName,
|
|
102
|
+
}).find((node) => JSON.stringify(node.nodePath) ===
|
|
103
|
+
JSON.stringify(result.insertedNode.nodePath));
|
|
104
|
+
return {
|
|
105
|
+
fileName: location.fileName,
|
|
106
|
+
source: location.source,
|
|
107
|
+
oldContents,
|
|
108
|
+
output: nextProject.files[location.fileName],
|
|
109
|
+
logLine: (_c = (_a = insertedNode === null || insertedNode === void 0 ? void 0 : insertedNode.location) === null || _a === void 0 ? void 0 : _a.line) !== null && _c !== void 0 ? _c : 1,
|
|
110
|
+
nodePathRemappings: result.nodePathRemappings.map(({ oldNodePath, newNodePath }) => ({ oldNodePath, newNodePath })),
|
|
111
|
+
insertedNodePath: result.insertedNode.nodePath,
|
|
112
|
+
};
|
|
62
113
|
};
|
|
63
114
|
exports.insertJsxElementIntoComposition = insertJsxElementIntoComposition;
|
package/dist/index.d.ts
CHANGED
|
@@ -106,6 +106,11 @@ export declare const StudioServerInternals: {
|
|
|
106
106
|
version: string;
|
|
107
107
|
additionalArgs: string[];
|
|
108
108
|
}) => string[];
|
|
109
|
+
getLocalPackageOverride: ({ remotionRoot, packageName, }: {
|
|
110
|
+
remotionRoot: string;
|
|
111
|
+
packageName: string;
|
|
112
|
+
}) => string | null;
|
|
113
|
+
localPackageRootKey: string;
|
|
109
114
|
getPackageManagerSpawnOptions: () => Pick<import("child_process").SpawnOptionsWithoutStdio, "shell">;
|
|
110
115
|
addCompletedClientRender: ({ render, remotionRoot, }: {
|
|
111
116
|
render: import("@remotion/studio-shared").CompletedClientRender;
|
package/dist/index.js
CHANGED
|
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "parseRemotionSkillVersion", { enumerable: true,
|
|
|
12
12
|
const file_watcher_1 = require("./file-watcher");
|
|
13
13
|
const get_latest_remotion_version_1 = require("./get-latest-remotion-version");
|
|
14
14
|
const get_installed_dependencies_1 = require("./helpers/get-installed-dependencies");
|
|
15
|
+
const get_local_package_override_1 = require("./helpers/get-local-package-override");
|
|
15
16
|
const install_command_1 = require("./helpers/install-command");
|
|
16
17
|
const package_manager_spawn_options_1 = require("./helpers/package-manager-spawn-options");
|
|
17
18
|
const max_timeline_tracks_1 = require("./max-timeline-tracks");
|
|
@@ -42,6 +43,8 @@ exports.StudioServerInternals = {
|
|
|
42
43
|
getInstalledDependencies: get_installed_dependencies_1.getInstalledDependencies,
|
|
43
44
|
getInstalledDependenciesWithVersions: get_installed_dependencies_1.getInstalledDependenciesWithVersions,
|
|
44
45
|
getInstallCommand: install_command_1.getInstallCommand,
|
|
46
|
+
getLocalPackageOverride: get_local_package_override_1.getLocalPackageOverride,
|
|
47
|
+
localPackageRootKey: get_local_package_override_1.localPackageRootKey,
|
|
45
48
|
getPackageManagerSpawnOptions: package_manager_spawn_options_1.getPackageManagerSpawnOptions,
|
|
46
49
|
addCompletedClientRender: client_render_queue_1.addCompletedClientRender,
|
|
47
50
|
getCompletedClientRenders: client_render_queue_1.getCompletedClientRenders,
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.allApiRoutes = void 0;
|
|
4
|
+
const add_composition_1 = require("./routes/add-composition");
|
|
4
5
|
const add_effect_1 = require("./routes/add-effect");
|
|
5
6
|
const add_effect_keyframe_1 = require("./routes/add-effect-keyframe");
|
|
7
|
+
const add_folder_1 = require("./routes/add-folder");
|
|
6
8
|
const add_keyframes_1 = require("./routes/add-keyframes");
|
|
7
9
|
const add_render_1 = require("./routes/add-render");
|
|
8
10
|
const add_sequence_keyframe_1 = require("./routes/add-sequence-keyframe");
|
|
9
|
-
const apply_codemod_1 = require("./routes/apply-codemod");
|
|
10
11
|
const apply_visual_control_change_1 = require("./routes/apply-visual-control-change");
|
|
11
12
|
const batch_update_keyframe_settings_1 = require("./routes/batch-update-keyframe-settings");
|
|
12
13
|
const cancel_render_1 = require("./routes/cancel-render");
|
|
@@ -15,26 +16,31 @@ const convert_figma_clipboard_to_svg_1 = require("./routes/convert-figma-clipboa
|
|
|
15
16
|
const copy_render_output_to_asset_1 = require("./routes/copy-render-output-to-asset");
|
|
16
17
|
const default_coding_agent_1 = require("./routes/default-coding-agent");
|
|
17
18
|
const default_editor_1 = require("./routes/default-editor");
|
|
19
|
+
const delete_composition_1 = require("./routes/delete-composition");
|
|
18
20
|
const delete_effect_1 = require("./routes/delete-effect");
|
|
19
|
-
const delete_jsx_nodes_1 = require("./routes/delete-jsx-nodes");
|
|
20
21
|
const delete_keyframes_1 = require("./routes/delete-keyframes");
|
|
22
|
+
const delete_nodes_1 = require("./routes/delete-nodes");
|
|
21
23
|
const delete_static_file_1 = require("./routes/delete-static-file");
|
|
22
24
|
const download_remote_asset_1 = require("./routes/download-remote-asset");
|
|
25
|
+
const duplicate_composition_1 = require("./routes/duplicate-composition");
|
|
23
26
|
const duplicate_effect_1 = require("./routes/duplicate-effect");
|
|
24
|
-
const
|
|
27
|
+
const duplicate_nodes_1 = require("./routes/duplicate-nodes");
|
|
25
28
|
const find_in_file_1 = require("./routes/find-in-file");
|
|
26
29
|
const insert_basic_captions_1 = require("./routes/insert-basic-captions");
|
|
30
|
+
const insert_composition_element_1 = require("./routes/insert-composition-element");
|
|
27
31
|
const insert_element_1 = require("./routes/insert-element");
|
|
28
|
-
const insert_jsx_element_1 = require("./routes/insert-jsx-element");
|
|
29
32
|
const install_remotion_skill_1 = require("./routes/install-remotion-skill");
|
|
30
33
|
const invalidate_bundle_1 = require("./routes/invalidate-bundle");
|
|
31
34
|
const log_studio_error_1 = require("./routes/log-studio-error");
|
|
35
|
+
const move_composition_1 = require("./routes/move-composition");
|
|
36
|
+
const move_folder_1 = require("./routes/move-folder");
|
|
32
37
|
const move_keyframes_1 = require("./routes/move-keyframes");
|
|
33
38
|
const open_in_editor_1 = require("./routes/open-in-editor");
|
|
34
39
|
const open_in_file_explorer_1 = require("./routes/open-in-file-explorer");
|
|
35
40
|
const open_in_git_client_1 = require("./routes/open-in-git-client");
|
|
36
41
|
const open_in_terminal_1 = require("./routes/open-in-terminal");
|
|
37
42
|
const paste_effects_1 = require("./routes/paste-effects");
|
|
43
|
+
const precompose_jsx_nodes_1 = require("./routes/precompose-jsx-nodes");
|
|
38
44
|
const prepare_element_install_1 = require("./routes/prepare-element-install");
|
|
39
45
|
const project_info_1 = require("./routes/project-info");
|
|
40
46
|
const redo_1 = require("./routes/redo");
|
|
@@ -42,6 +48,8 @@ const register_client_render_1 = require("./routes/register-client-render");
|
|
|
42
48
|
const release_notes_1 = require("./routes/release-notes");
|
|
43
49
|
const remotion_skills_info_1 = require("./routes/remotion-skills-info");
|
|
44
50
|
const remove_render_1 = require("./routes/remove-render");
|
|
51
|
+
const rename_composition_1 = require("./routes/rename-composition");
|
|
52
|
+
const rename_folder_1 = require("./routes/rename-folder");
|
|
45
53
|
const rename_static_file_1 = require("./routes/rename-static-file");
|
|
46
54
|
const reorder_effect_1 = require("./routes/reorder-effect");
|
|
47
55
|
const reorder_sequence_1 = require("./routes/reorder-sequence");
|
|
@@ -51,7 +59,7 @@ const save_effect_props_1 = require("./routes/save-effect-props");
|
|
|
51
59
|
const save_multiple_effect_props_1 = require("./routes/save-multiple-effect-props");
|
|
52
60
|
const save_sequence_props_1 = require("./routes/save-sequence-props");
|
|
53
61
|
const shutdown_studio_1 = require("./routes/shutdown-studio");
|
|
54
|
-
const
|
|
62
|
+
const split_sequences_1 = require("./routes/split-sequences");
|
|
55
63
|
const split_video_from_audio_1 = require("./routes/split-video-from-audio");
|
|
56
64
|
const subscribe_to_default_props_1 = require("./routes/subscribe-to-default-props");
|
|
57
65
|
const subscribe_to_file_existence_1 = require("./routes/subscribe-to-file-existence");
|
|
@@ -61,13 +69,15 @@ const unregister_client_render_1 = require("./routes/unregister-client-render");
|
|
|
61
69
|
const unsubscribe_from_default_props_1 = require("./routes/unsubscribe-from-default-props");
|
|
62
70
|
const unsubscribe_from_file_existence_1 = require("./routes/unsubscribe-from-file-existence");
|
|
63
71
|
const unsubscribe_from_sequence_props_1 = require("./routes/unsubscribe-from-sequence-props");
|
|
72
|
+
const unwrap_folder_1 = require("./routes/unwrap-folder");
|
|
64
73
|
const update_available_1 = require("./routes/update-available");
|
|
74
|
+
const update_composition_metadata_1 = require("./routes/update-composition-metadata");
|
|
65
75
|
const update_default_props_1 = require("./routes/update-default-props");
|
|
66
76
|
const update_effect_keyframe_settings_1 = require("./routes/update-effect-keyframe-settings");
|
|
67
77
|
const update_element_install_target_1 = require("./routes/update-element-install-target");
|
|
68
78
|
const update_sequence_keyframe_settings_1 = require("./routes/update-sequence-keyframe-settings");
|
|
69
79
|
const upgrade_remotion_1 = require("./routes/upgrade-remotion");
|
|
70
|
-
const
|
|
80
|
+
const wrap_node_1 = require("./routes/wrap-node");
|
|
71
81
|
exports.allApiRoutes = {
|
|
72
82
|
'/api/invalidate-bundle': invalidate_bundle_1.invalidateBundleHandler,
|
|
73
83
|
'/api/composition-component-info': composition_component_info_1.compositionComponentInfoHandler,
|
|
@@ -88,7 +98,16 @@ exports.allApiRoutes = {
|
|
|
88
98
|
'/api/unregister-client-render': unregister_client_render_1.unregisterClientRenderHandler,
|
|
89
99
|
'/api/update-default-props': update_default_props_1.updateDefaultPropsHandler,
|
|
90
100
|
'/api/apply-visual-control-change': apply_visual_control_change_1.applyVisualControlHandler,
|
|
91
|
-
'/api/
|
|
101
|
+
'/api/add-composition': add_composition_1.addCompositionHandler,
|
|
102
|
+
'/api/duplicate-composition': duplicate_composition_1.duplicateCompositionHandler,
|
|
103
|
+
'/api/rename-composition': rename_composition_1.renameCompositionHandler,
|
|
104
|
+
'/api/update-composition-metadata': update_composition_metadata_1.updateCompositionMetadataHandler,
|
|
105
|
+
'/api/delete-composition': delete_composition_1.deleteCompositionHandler,
|
|
106
|
+
'/api/move-composition': move_composition_1.moveCompositionHandler,
|
|
107
|
+
'/api/add-folder': add_folder_1.addFolderHandler,
|
|
108
|
+
'/api/rename-folder': rename_folder_1.renameFolderHandler,
|
|
109
|
+
'/api/unwrap-folder': unwrap_folder_1.unwrapFolderHandler,
|
|
110
|
+
'/api/move-folder': move_folder_1.moveFolderHandler,
|
|
92
111
|
'/api/subscribe-to-default-props': subscribe_to_default_props_1.subscribeToDefaultProps,
|
|
93
112
|
'/api/unsubscribe-from-default-props': unsubscribe_from_default_props_1.unsubscribeFromDefaultProps,
|
|
94
113
|
'/api/subscribe-to-sequence-props': subscribe_to_sequence_props_1.subscribeToSequenceProps,
|
|
@@ -110,10 +129,11 @@ exports.allApiRoutes = {
|
|
|
110
129
|
'/api/batch-update-keyframe-settings': batch_update_keyframe_settings_1.batchUpdateKeyframeSettingsHandler,
|
|
111
130
|
'/api/delete-effect': delete_effect_1.deleteEffectHandler,
|
|
112
131
|
'/api/paste-effects': paste_effects_1.pasteEffectsHandler,
|
|
113
|
-
'/api/delete-
|
|
114
|
-
'/api/duplicate-
|
|
115
|
-
'/api/wrap-
|
|
116
|
-
'/api/
|
|
132
|
+
'/api/delete-nodes': delete_nodes_1.deleteNodesHandler,
|
|
133
|
+
'/api/duplicate-nodes': duplicate_nodes_1.duplicateNodesHandler,
|
|
134
|
+
'/api/wrap-node': wrap_node_1.wrapNodeHandler,
|
|
135
|
+
'/api/precompose-jsx-nodes': precompose_jsx_nodes_1.precomposeJsxNodesHandler,
|
|
136
|
+
'/api/split-sequences': split_sequences_1.splitSequencesHandler,
|
|
117
137
|
'/api/split-video-from-audio': split_video_from_audio_1.splitVideoFromAudioHandler,
|
|
118
138
|
'/api/insert-basic-captions': insert_basic_captions_1.insertBasicCaptionsHandler,
|
|
119
139
|
'/api/replace-video-source': replace_video_source_1.replaceVideoSourceHandler,
|
|
@@ -130,7 +150,7 @@ exports.allApiRoutes = {
|
|
|
130
150
|
'/api/restart-studio': restart_studio_1.handleRestartStudio,
|
|
131
151
|
'/api/default-coding-agent-info': default_coding_agent_1.getDefaultCodingAgentInfoHandler,
|
|
132
152
|
'/api/default-editor-info': default_editor_1.getDefaultEditorInfoHandler,
|
|
133
|
-
'/api/insert-
|
|
153
|
+
'/api/insert-composition-element': insert_composition_element_1.insertCompositionElementHandler,
|
|
134
154
|
'/api/insert-element': insert_element_1.insertElementHandler,
|
|
135
155
|
'/api/prepare-element-install': prepare_element_install_1.prepareElementInstallHandler,
|
|
136
156
|
'/api/update-element-install-target': update_element_install_target_1.updateElementInstallTargetHandler,
|
|
@@ -30,19 +30,27 @@ exports.getElementInstallTargetByClientId = getElementInstallTargetByClientId;
|
|
|
30
30
|
const getElementInstallTarget = (requestId) => {
|
|
31
31
|
const now = Date.now();
|
|
32
32
|
let bestTarget = null;
|
|
33
|
+
let unfocusedTarget = null;
|
|
34
|
+
let multipleUnfocusedTargets = false;
|
|
33
35
|
for (const [clientId, currentTarget] of targetsByClientId) {
|
|
34
36
|
if (now - currentTarget.updatedAt >= exports.ELEMENT_INSTALL_TARGET_MAX_AGE) {
|
|
35
37
|
targetsByClientId.delete(clientId);
|
|
36
38
|
continue;
|
|
37
39
|
}
|
|
38
|
-
if (requestId !== null && currentTarget.requestId !== requestId)
|
|
40
|
+
if ((requestId !== null && currentTarget.requestId !== requestId) ||
|
|
41
|
+
currentTarget.readOnly) {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
if (currentTarget.lastFocusedAt === null) {
|
|
45
|
+
multipleUnfocusedTargets || (multipleUnfocusedTargets = unfocusedTarget !== null);
|
|
46
|
+
unfocusedTarget = currentTarget;
|
|
39
47
|
continue;
|
|
40
48
|
}
|
|
41
49
|
if (bestTarget === null || compareTargets(currentTarget, bestTarget) > 0) {
|
|
42
50
|
bestTarget = currentTarget;
|
|
43
51
|
}
|
|
44
52
|
}
|
|
45
|
-
return bestTarget;
|
|
53
|
+
return bestTarget !== null && bestTarget !== void 0 ? bestTarget : (multipleUnfocusedTargets ? null : unfocusedTarget);
|
|
46
54
|
};
|
|
47
55
|
exports.getElementInstallTarget = getElementInstallTarget;
|
|
48
56
|
const issueStudioProtocolTarget = ({ now, origin, purpose, target, }) => {
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addCompositionHandler = void 0;
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
5
|
+
const renderer_1 = require("@remotion/renderer");
|
|
6
|
+
const add_composition_to_file_1 = require("../../codemods/add-composition-to-file");
|
|
7
|
+
const file_watcher_1 = require("../../file-watcher");
|
|
8
|
+
const resolve_file_inside_project_1 = require("../../helpers/resolve-file-inside-project");
|
|
9
|
+
const format_log_file_location_1 = require("../format-log-file-location");
|
|
10
|
+
const project_info_1 = require("../project-info");
|
|
11
|
+
const undo_stack_1 = require("../undo-stack");
|
|
12
|
+
const can_update_default_props_1 = require("./can-update-default-props");
|
|
13
|
+
const source_file_write_queue_1 = require("./source-file-write-queue");
|
|
14
|
+
const addCompositionHandler = ({ input: request, logLevel, remotionRoot, entryPoint }) => (0, source_file_write_queue_1.withSourceFileWriteQueue)(async () => {
|
|
15
|
+
var _a, _b;
|
|
16
|
+
var _c, _d;
|
|
17
|
+
try {
|
|
18
|
+
let filePath;
|
|
19
|
+
if ((_a = request.symbolicatedStack) === null || _a === void 0 ? void 0 : _a.originalFileName) {
|
|
20
|
+
filePath = (0, resolve_file_inside_project_1.resolveFileInsideProject)({
|
|
21
|
+
remotionRoot,
|
|
22
|
+
fileName: request.symbolicatedStack.originalFileName,
|
|
23
|
+
action: 'add a composition to',
|
|
24
|
+
}).absolutePath;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
const { rootFile } = await (0, project_info_1.getProjectInfo)(remotionRoot, entryPoint);
|
|
28
|
+
if (rootFile === null) {
|
|
29
|
+
throw new Error('Cannot find the Remotion root file');
|
|
30
|
+
}
|
|
31
|
+
filePath = rootFile;
|
|
32
|
+
}
|
|
33
|
+
(0, can_update_default_props_1.checkIfTypeScriptFile)(filePath);
|
|
34
|
+
const result = await (0, add_composition_to_file_1.addCompositionToFile)({
|
|
35
|
+
filePath,
|
|
36
|
+
options: request.options,
|
|
37
|
+
remotionRoot,
|
|
38
|
+
});
|
|
39
|
+
for (const change of result.changes) {
|
|
40
|
+
const currentContents = (0, node_fs_1.existsSync)(change.filePath)
|
|
41
|
+
? (0, node_fs_1.readFileSync)(change.filePath, 'utf-8')
|
|
42
|
+
: null;
|
|
43
|
+
if (currentContents !== change.previousContents) {
|
|
44
|
+
throw new Error(`Source changed before adding composition: ${change.filePath}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (result.changes.length > 0) {
|
|
48
|
+
const logLine = (_c = (_b = request.symbolicatedStack) === null || _b === void 0 ? void 0 : _b.originalLineNumber) !== null && _c !== void 0 ? _c : 1;
|
|
49
|
+
(0, undo_stack_1.pushTransactionToUndoStack)({
|
|
50
|
+
snapshots: result.changes.map((change) => ({
|
|
51
|
+
filePath: change.filePath,
|
|
52
|
+
oldContents: change.previousContents,
|
|
53
|
+
newContents: change.nextContents,
|
|
54
|
+
logLine: change.filePath === filePath ? logLine : 1,
|
|
55
|
+
nodePathRemappings: null,
|
|
56
|
+
})),
|
|
57
|
+
logLevel,
|
|
58
|
+
remotionRoot,
|
|
59
|
+
description: {
|
|
60
|
+
undoMessage: `↩️ Creation of composition "${request.options.newId}"`,
|
|
61
|
+
redoMessage: `↪️ Creation of composition "${request.options.newId}"`,
|
|
62
|
+
},
|
|
63
|
+
entryType: 'new-composition',
|
|
64
|
+
suppressHmrOnFileRestore: false,
|
|
65
|
+
undoRedoNavigation: request.undoRedoNavigation,
|
|
66
|
+
});
|
|
67
|
+
for (const change of result.changes) {
|
|
68
|
+
if (change.nextContents === null) {
|
|
69
|
+
throw new Error('Adding a composition cannot remove source files');
|
|
70
|
+
}
|
|
71
|
+
(0, undo_stack_1.suppressUndoStackInvalidation)(change.filePath);
|
|
72
|
+
(0, file_watcher_1.writeFileAndNotifyFileWatchers)({
|
|
73
|
+
file: change.filePath,
|
|
74
|
+
content: change.nextContents,
|
|
75
|
+
originatorClientId: undefined,
|
|
76
|
+
metadata: null,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
const locationLabel = (0, format_log_file_location_1.formatLogFileLocation)({
|
|
80
|
+
remotionRoot,
|
|
81
|
+
absolutePath: filePath,
|
|
82
|
+
line: logLine,
|
|
83
|
+
});
|
|
84
|
+
renderer_1.RenderInternals.Log.info({ indent: false, logLevel }, `${(0, source_file_write_queue_1.getCodemodTimingPrefix)(logLevel)}${renderer_1.RenderInternals.chalk.blueBright(locationLabel)} Created composition "${request.options.newId}"`);
|
|
85
|
+
(0, undo_stack_1.printUndoHint)(logLevel);
|
|
86
|
+
}
|
|
87
|
+
return { success: true, nodePathMutation: null };
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
return {
|
|
91
|
+
success: false,
|
|
92
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
93
|
+
stack: error instanceof Error ? ((_d = error.stack) !== null && _d !== void 0 ? _d : '') : '',
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
exports.addCompositionHandler = addCompositionHandler;
|