@remotion/studio-server 4.0.501 → 4.0.503

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 (70) hide show
  1. package/dist/codemods/update-inline-caption-patches.d.ts +1 -11
  2. package/dist/codemods/update-inline-caption-patches.js +2 -183
  3. package/dist/codemods/update-sequence-props/update-sequence-props.d.ts +2 -35
  4. package/dist/codemods/update-sequence-props/update-sequence-props.js +7 -720
  5. package/dist/detect-outdated-remotion-skills.d.ts +25 -0
  6. package/dist/detect-outdated-remotion-skills.js +73 -0
  7. package/dist/helpers/custom-editor.d.ts +37 -0
  8. package/dist/helpers/custom-editor.js +167 -0
  9. package/dist/helpers/editor-registry.d.ts +18 -0
  10. package/dist/helpers/editor-registry.js +500 -0
  11. package/dist/helpers/open-in-editor.d.ts +3 -4
  12. package/dist/helpers/open-in-editor.js +5 -75
  13. package/dist/helpers/resolve-composition-component.js +18 -6
  14. package/dist/helpers/resolve-editor.d.ts +27 -0
  15. package/dist/helpers/resolve-editor.js +90 -0
  16. package/dist/helpers/resolve-file-inside-project.d.ts +2 -0
  17. package/dist/helpers/resolve-file-inside-project.js +5 -2
  18. package/dist/index.d.ts +17 -1
  19. package/dist/index.js +9 -1
  20. package/dist/preview-server/api-routes.js +6 -1
  21. package/dist/preview-server/api-types.d.ts +2 -1
  22. package/dist/preview-server/element-install-state.d.ts +19 -0
  23. package/dist/preview-server/element-install-state.js +46 -1
  24. package/dist/preview-server/handler.d.ts +3 -1
  25. package/dist/preview-server/handler.js +3 -2
  26. package/dist/preview-server/parse-body.d.ts +6 -1
  27. package/dist/preview-server/parse-body.js +60 -9
  28. package/dist/preview-server/routes/can-update-default-props.d.ts +1 -1
  29. package/dist/preview-server/routes/can-update-default-props.js +5 -132
  30. package/dist/preview-server/routes/can-update-sequence-props.d.ts +3 -2
  31. package/dist/preview-server/routes/can-update-sequence-props.js +52 -9
  32. package/dist/preview-server/routes/default-editor.d.ts +8 -0
  33. package/dist/preview-server/routes/default-editor.js +131 -0
  34. package/dist/preview-server/routes/delete-effect-keyframe.d.ts +3 -0
  35. package/dist/preview-server/routes/delete-effect-keyframe.js +89 -0
  36. package/dist/preview-server/routes/delete-sequence-keyframe.d.ts +3 -0
  37. package/dist/preview-server/routes/delete-sequence-keyframe.js +82 -0
  38. package/dist/preview-server/routes/element-install-plan.d.ts +32 -0
  39. package/dist/preview-server/routes/element-install-plan.js +122 -0
  40. package/dist/preview-server/routes/insert-element.d.ts +1 -1
  41. package/dist/preview-server/routes/insert-element.js +68 -107
  42. package/dist/preview-server/routes/insert-jsx-element.js +5 -5
  43. package/dist/preview-server/routes/open-in-editor.d.ts +5 -1
  44. package/dist/preview-server/routes/open-in-editor.js +42 -12
  45. package/dist/preview-server/routes/prepare-element-install.d.ts +3 -0
  46. package/dist/preview-server/routes/prepare-element-install.js +25 -0
  47. package/dist/preview-server/routes/safe-element-install-path.d.ts +9 -0
  48. package/dist/preview-server/routes/safe-element-install-path.js +58 -0
  49. package/dist/preview-server/routes/save-props-mutex.d.ts +1 -0
  50. package/dist/preview-server/routes/save-props-mutex.js +11 -0
  51. package/dist/preview-server/sequence-props-watchers.js +2 -1
  52. package/dist/preview-server/start-server.d.ts +2 -0
  53. package/dist/preview-server/start-server.js +1 -0
  54. package/dist/preview-server/studio-protocol/handle-discovery.d.ts +11 -0
  55. package/dist/preview-server/studio-protocol/handle-discovery.js +106 -0
  56. package/dist/preview-server/studio-protocol/handle-install.d.ts +10 -0
  57. package/dist/preview-server/studio-protocol/handle-install.js +147 -0
  58. package/dist/preview-server/studio-protocol/origin-policy.d.ts +11 -0
  59. package/dist/preview-server/studio-protocol/origin-policy.js +43 -0
  60. package/dist/preview-server/studio-protocol/protocol-response.d.ts +7 -0
  61. package/dist/preview-server/studio-protocol/protocol-response.js +13 -0
  62. package/dist/preview-server/update-available.d.ts +6 -0
  63. package/dist/preview-server/update-available.js +30 -4
  64. package/dist/remotion-skill-names.d.ts +2 -0
  65. package/dist/remotion-skill-names.js +16 -0
  66. package/dist/routes.d.ts +3 -1
  67. package/dist/routes.js +19 -157
  68. package/dist/start-studio.d.ts +3 -1
  69. package/dist/start-studio.js +2 -1
  70. package/package.json +9 -8
@@ -0,0 +1,11 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ import type { GitSource } from '@remotion/studio-shared';
3
+ import type { LiveEventsServer } from '../live-events';
4
+ export declare const ELEMENT_INSTALL_TARGET_RESPONSE_WAIT = 250;
5
+ export declare const handleStudioProtocolDiscovery: ({ gitSource, liveEventsServer, remotionRoot, request, response, }: {
6
+ readonly gitSource: GitSource | null;
7
+ readonly liveEventsServer: LiveEventsServer;
8
+ readonly remotionRoot: string;
9
+ readonly request: IncomingMessage;
10
+ readonly response: ServerResponse<IncomingMessage>;
11
+ }) => Promise<void>;
@@ -0,0 +1,106 @@
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.handleStudioProtocolDiscovery = exports.ELEMENT_INSTALL_TARGET_RESPONSE_WAIT = void 0;
7
+ const node_path_1 = __importDefault(require("node:path"));
8
+ const studio_shared_1 = require("@remotion/studio-shared");
9
+ const version_1 = require("remotion/version");
10
+ const element_install_state_1 = require("../element-install-state");
11
+ const origin_policy_1 = require("./origin-policy");
12
+ const protocol_response_1 = require("./protocol-response");
13
+ const ELEMENT_INSTALL_FOCUS_MAX_AGE = 5 * 60 * 1000;
14
+ exports.ELEMENT_INSTALL_TARGET_RESPONSE_WAIT = 250;
15
+ const requestInstallTarget = ({ liveEventsServer, }) => {
16
+ const requestId = `${Date.now()}-${Math.random().toString(16).slice(2)}`;
17
+ liveEventsServer.sendEventToClient({
18
+ type: 'request-element-install-target',
19
+ requestId,
20
+ });
21
+ return requestId;
22
+ };
23
+ const getLiveInstallableTarget = (requestId) => {
24
+ const target = (0, element_install_state_1.getElementInstallTarget)(requestId);
25
+ const now = Date.now();
26
+ if (target === null ||
27
+ now - target.updatedAt >= element_install_state_1.ELEMENT_INSTALL_TARGET_MAX_AGE ||
28
+ target.lastFocusedAt === null ||
29
+ now - target.lastFocusedAt >= ELEMENT_INSTALL_FOCUS_MAX_AGE ||
30
+ !target.canInstall ||
31
+ target.readOnly ||
32
+ target.compositionFile === null ||
33
+ target.compositionId === null) {
34
+ return null;
35
+ }
36
+ return target;
37
+ };
38
+ const getProject = ({ gitSource, remotionRoot, }) => (0, studio_shared_1.getProjectName)({
39
+ basename: node_path_1.default.basename,
40
+ gitSource,
41
+ resolvedRemotionRoot: remotionRoot,
42
+ });
43
+ const handleStudioProtocolDiscovery = ({ gitSource, liveEventsServer, remotionRoot, request, response, }) => {
44
+ (0, origin_policy_1.setStudioProtocolCorsHeaders)({ request, response });
45
+ const requestOrigin = (0, origin_policy_1.getAllowedStudioProtocolOrigin)(request.headers.origin);
46
+ if (requestOrigin === null) {
47
+ (0, protocol_response_1.writeStudioProtocolError)({
48
+ code: 'unsupported-origin',
49
+ message: 'Origin not allowed',
50
+ response,
51
+ status: 403,
52
+ });
53
+ return Promise.resolve();
54
+ }
55
+ if (request.method !== 'GET') {
56
+ (0, protocol_response_1.writeStudioProtocolError)({
57
+ code: 'method-not-allowed',
58
+ message: 'Use GET for Studio Protocol discovery.',
59
+ response,
60
+ status: 405,
61
+ });
62
+ return Promise.resolve();
63
+ }
64
+ const requestId = requestInstallTarget({ liveEventsServer });
65
+ return new Promise((resolve) => {
66
+ setTimeout(() => {
67
+ const now = Date.now();
68
+ const target = getLiveInstallableTarget(requestId);
69
+ const issued = target === null
70
+ ? null
71
+ : (0, element_install_state_1.issueStudioProtocolTarget)({
72
+ now,
73
+ origin: requestOrigin,
74
+ target,
75
+ });
76
+ response.writeHead(200, {
77
+ 'Cache-Control': 'no-store',
78
+ 'Content-Type': 'application/json',
79
+ });
80
+ response.end(JSON.stringify({
81
+ protocol: 'remotion-studio-protocol',
82
+ protocolVersion: 1,
83
+ studioVersion: version_1.VERSION,
84
+ capabilities: {
85
+ install: [
86
+ {
87
+ payloadType: 'remotion-element',
88
+ payloadVersions: [1],
89
+ },
90
+ ],
91
+ },
92
+ projectName: getProject({ gitSource, remotionRoot }),
93
+ installTarget: issued === null || target === null
94
+ ? null
95
+ : {
96
+ id: issued.id,
97
+ expiresAt: issued.expiresAt,
98
+ compositionId: target.compositionId,
99
+ lastFocusedAt: target.lastFocusedAt,
100
+ },
101
+ }));
102
+ resolve();
103
+ }, exports.ELEMENT_INSTALL_TARGET_RESPONSE_WAIT);
104
+ });
105
+ };
106
+ exports.handleStudioProtocolDiscovery = handleStudioProtocolDiscovery;
@@ -0,0 +1,10 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ import type { LiveEventsServer } from '../live-events';
3
+ type FocusStudioTab = (studioUrl: string) => void;
4
+ export declare const handleStudioProtocolInstall: ({ focusStudioTab, liveEventsServer, request, response, }: {
5
+ readonly focusStudioTab: FocusStudioTab;
6
+ readonly liveEventsServer: LiveEventsServer;
7
+ readonly request: IncomingMessage;
8
+ readonly response: ServerResponse<IncomingMessage>;
9
+ }) => Promise<void>;
10
+ export {};
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleStudioProtocolInstall = void 0;
4
+ const studio_protocol_1 = require("@remotion/studio-protocol");
5
+ const zod_1 = require("zod");
6
+ const element_install_state_1 = require("../element-install-state");
7
+ const parse_body_1 = require("../parse-body");
8
+ const origin_policy_1 = require("./origin-policy");
9
+ const protocol_response_1 = require("./protocol-response");
10
+ const studioProtocolInstallRequestSchema = zod_1.z.object({
11
+ protocol: zod_1.z.literal('remotion-studio-protocol'),
12
+ protocolVersion: zod_1.z.literal(1),
13
+ targetId: zod_1.z.string(),
14
+ payload: zod_1.z.unknown(),
15
+ });
16
+ // A valid payload may contain 250,000 JSON characters. Allow room for its
17
+ // UTF-8 representation and the protocol envelope while keeping memory bounded.
18
+ const MAX_STUDIO_PROTOCOL_INSTALL_BODY_SIZE = 1000000;
19
+ const deliverElementInstall = ({ element, focusStudioTab, liveEventsServer, origin, target, }) => {
20
+ if (target.compositionFile === null || target.compositionId === null) {
21
+ return false;
22
+ }
23
+ const installRequest = {
24
+ id: `${Date.now()}-${Math.random().toString(16).slice(2)}`,
25
+ clientId: target.clientId,
26
+ createdAt: Date.now(),
27
+ compositionFile: target.compositionFile,
28
+ compositionId: target.compositionId,
29
+ element,
30
+ from: null,
31
+ position: null,
32
+ source: {
33
+ type: 'studio-protocol',
34
+ origin,
35
+ },
36
+ };
37
+ const delivered = liveEventsServer.sendEventToClientId(target.clientId, {
38
+ type: 'element-install-request',
39
+ request: installRequest,
40
+ });
41
+ if (delivered) {
42
+ focusStudioTab(target.studioUrl);
43
+ }
44
+ return delivered;
45
+ };
46
+ const handleStudioProtocolInstall = async ({ focusStudioTab, liveEventsServer, request, response, }) => {
47
+ (0, origin_policy_1.setStudioProtocolCorsHeaders)({ request, response });
48
+ const requestOrigin = (0, origin_policy_1.getAllowedStudioProtocolOrigin)(request.headers.origin);
49
+ if (requestOrigin === null) {
50
+ (0, protocol_response_1.writeStudioProtocolError)({
51
+ code: 'unsupported-origin',
52
+ message: 'Origin not allowed',
53
+ response,
54
+ status: 403,
55
+ });
56
+ return;
57
+ }
58
+ if (request.method !== 'POST') {
59
+ (0, protocol_response_1.writeStudioProtocolError)({
60
+ code: 'method-not-allowed',
61
+ message: 'Use POST to request an Element installation.',
62
+ response,
63
+ status: 405,
64
+ });
65
+ return;
66
+ }
67
+ let body;
68
+ try {
69
+ body = await (0, parse_body_1.parseRequestBody)(request, {
70
+ maxBytes: MAX_STUDIO_PROTOCOL_INSTALL_BODY_SIZE,
71
+ });
72
+ }
73
+ catch (error) {
74
+ if (error instanceof parse_body_1.RequestBodyTooLargeError) {
75
+ (0, protocol_response_1.writeStudioProtocolError)({
76
+ code: 'request-too-large',
77
+ message: 'The request body is too large.',
78
+ response,
79
+ status: 413,
80
+ });
81
+ return;
82
+ }
83
+ (0, protocol_response_1.writeStudioProtocolError)({
84
+ code: 'invalid-request',
85
+ message: 'The request body is not valid JSON.',
86
+ response,
87
+ status: 400,
88
+ });
89
+ return;
90
+ }
91
+ const parsedRequest = studioProtocolInstallRequestSchema.safeParse(body);
92
+ if (!parsedRequest.success) {
93
+ (0, protocol_response_1.writeStudioProtocolError)({
94
+ code: 'unsupported-protocol',
95
+ message: 'Invalid Remotion Studio Protocol request.',
96
+ response,
97
+ status: 400,
98
+ });
99
+ return;
100
+ }
101
+ const payload = studio_protocol_1.StudioProtocolInternals.parseStudioElementPayload(parsedRequest.data.payload);
102
+ if (payload === null) {
103
+ (0, protocol_response_1.writeStudioProtocolError)({
104
+ code: 'invalid-payload',
105
+ message: 'Invalid Element payload.',
106
+ response,
107
+ status: 400,
108
+ });
109
+ return;
110
+ }
111
+ const target = (0, element_install_state_1.consumeStudioProtocolTarget)({
112
+ now: Date.now(),
113
+ origin: requestOrigin,
114
+ targetId: parsedRequest.data.targetId,
115
+ });
116
+ if (target === null) {
117
+ (0, protocol_response_1.writeStudioProtocolError)({
118
+ code: 'target-expired',
119
+ message: 'The selected Studio target is no longer available.',
120
+ response,
121
+ status: 409,
122
+ });
123
+ return;
124
+ }
125
+ if (!deliverElementInstall({
126
+ element: payload.element,
127
+ focusStudioTab,
128
+ liveEventsServer,
129
+ origin: requestOrigin,
130
+ target,
131
+ })) {
132
+ (0, protocol_response_1.writeStudioProtocolError)({
133
+ code: 'target-expired',
134
+ message: 'The selected Remotion Studio tab is no longer connected.',
135
+ response,
136
+ status: 409,
137
+ });
138
+ return;
139
+ }
140
+ response.writeHead(200, { 'Content-Type': 'application/json' });
141
+ response.end(JSON.stringify({
142
+ protocol: 'remotion-studio-protocol',
143
+ protocolVersion: 1,
144
+ status: 'awaiting-confirmation',
145
+ }));
146
+ };
147
+ exports.handleStudioProtocolInstall = handleStudioProtocolInstall;
@@ -0,0 +1,11 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ export declare const getAllowedStudioProtocolOrigin: (origin: string | undefined) => string | null;
3
+ export declare const isAllowedStudioProtocolOrigin: (origin: string | undefined) => boolean;
4
+ export declare const setStudioProtocolCorsHeaders: ({ request, response, }: {
5
+ readonly request: IncomingMessage;
6
+ readonly response: ServerResponse<IncomingMessage>;
7
+ }) => void;
8
+ export declare const handleStudioProtocolOptions: ({ request, response, }: {
9
+ readonly request: IncomingMessage;
10
+ readonly response: ServerResponse<IncomingMessage>;
11
+ }) => Promise<void>;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleStudioProtocolOptions = exports.setStudioProtocolCorsHeaders = exports.isAllowedStudioProtocolOrigin = exports.getAllowedStudioProtocolOrigin = void 0;
4
+ const getAllowedStudioProtocolOrigin = (origin) => {
5
+ if (!origin) {
6
+ return null;
7
+ }
8
+ try {
9
+ const url = new URL(origin);
10
+ const isLoopbackHttp = url.protocol === 'http:' &&
11
+ (url.hostname === 'localhost' || url.hostname === '127.0.0.1');
12
+ if (url.protocol !== 'https:' && !isLoopbackHttp) {
13
+ return null;
14
+ }
15
+ return url.origin;
16
+ }
17
+ catch (_a) {
18
+ return null;
19
+ }
20
+ };
21
+ exports.getAllowedStudioProtocolOrigin = getAllowedStudioProtocolOrigin;
22
+ const isAllowedStudioProtocolOrigin = (origin) => (0, exports.getAllowedStudioProtocolOrigin)(origin) !== null;
23
+ exports.isAllowedStudioProtocolOrigin = isAllowedStudioProtocolOrigin;
24
+ const setStudioProtocolCorsHeaders = ({ request, response, }) => {
25
+ const origin = (0, exports.getAllowedStudioProtocolOrigin)(request.headers.origin);
26
+ if (origin === null) {
27
+ return;
28
+ }
29
+ response.setHeader('Access-Control-Allow-Origin', origin);
30
+ response.setHeader('Vary', 'Origin, Access-Control-Request-Headers, Access-Control-Request-Private-Network');
31
+ response.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
32
+ response.setHeader('Access-Control-Allow-Headers', 'Content-Type');
33
+ response.setHeader('Access-Control-Max-Age', '600');
34
+ response.setHeader('Access-Control-Allow-Private-Network', 'true');
35
+ };
36
+ exports.setStudioProtocolCorsHeaders = setStudioProtocolCorsHeaders;
37
+ const handleStudioProtocolOptions = ({ request, response, }) => {
38
+ (0, exports.setStudioProtocolCorsHeaders)({ request, response });
39
+ response.writeHead((0, exports.getAllowedStudioProtocolOrigin)(request.headers.origin) === null ? 403 : 204);
40
+ response.end();
41
+ return Promise.resolve();
42
+ };
43
+ exports.handleStudioProtocolOptions = handleStudioProtocolOptions;
@@ -0,0 +1,7 @@
1
+ import type { ServerResponse } from 'node:http';
2
+ export declare const writeStudioProtocolError: ({ code, message, response, status, }: {
3
+ readonly code: string;
4
+ readonly message: string;
5
+ readonly response: ServerResponse<import("http").IncomingMessage>;
6
+ readonly status: number;
7
+ }) => void;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.writeStudioProtocolError = void 0;
4
+ const writeStudioProtocolError = ({ code, message, response, status, }) => {
5
+ response.writeHead(status, { 'Content-Type': 'application/json' });
6
+ response.end(JSON.stringify({
7
+ protocol: 'remotion-studio-protocol',
8
+ protocolVersion: 1,
9
+ status: 'error',
10
+ error: { code, message },
11
+ }));
12
+ };
13
+ exports.writeStudioProtocolError = writeStudioProtocolError;
@@ -1,3 +1,9 @@
1
1
  import type { UpdateAvailableResponse } from '@remotion/studio-shared';
2
+ export declare const isUpdateAvailable: ({ remotionRoot, currentVersion, logLevel, getLatestVersion, }: {
3
+ remotionRoot: string;
4
+ currentVersion: string;
5
+ logLevel: "error" | "info" | "trace" | "verbose" | "warn";
6
+ getLatestVersion: (() => Promise<string>) | null;
7
+ }) => Promise<UpdateAvailableResponse>;
2
8
  export declare const getRemotionVersion: () => any;
3
9
  export declare const isUpdateAvailableWithTimeout: (remotionRoot: string, logLevel: "error" | "info" | "trace" | "verbose" | "warn") => Promise<UpdateAvailableResponse>;
@@ -3,12 +3,26 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.isUpdateAvailableWithTimeout = exports.getRemotionVersion = void 0;
6
+ exports.isUpdateAvailableWithTimeout = exports.getRemotionVersion = exports.isUpdateAvailable = void 0;
7
+ const node_fs_1 = require("node:fs");
8
+ const node_path_1 = __importDefault(require("node:path"));
7
9
  const semver_1 = __importDefault(require("semver"));
10
+ const detect_outdated_remotion_skills_1 = require("../detect-outdated-remotion-skills");
8
11
  const get_latest_remotion_version_1 = require("../get-latest-remotion-version");
9
12
  const get_package_manager_1 = require("./get-package-manager");
10
- const isUpdateAvailable = async ({ remotionRoot, currentVersion, logLevel, }) => {
11
- const latest = await (0, get_latest_remotion_version_1.getLatestRemotionVersion)();
13
+ const getSkillsUpdateInfo = ({ remotionRoot, currentVersion, }) => {
14
+ const projectSkills = (0, detect_outdated_remotion_skills_1.detectOutdatedRemotionSkills)({
15
+ cwd: remotionRoot,
16
+ currentVersion,
17
+ }).project;
18
+ return {
19
+ skillsUpdateAvailable: projectSkills.type === 'outdated',
20
+ remotionUpgradeSkillAvailable: (0, node_fs_1.existsSync)(node_path_1.default.join(remotionRoot, '.agents', 'skills', 'remotion-upgrade', 'SKILL.md')),
21
+ };
22
+ };
23
+ const isUpdateAvailable = async ({ remotionRoot, currentVersion, logLevel, getLatestVersion, }) => {
24
+ const latest = await (getLatestVersion !== null && getLatestVersion !== void 0 ? getLatestVersion : get_latest_remotion_version_1.getLatestRemotionVersion)();
25
+ const skillsUpdateInfo = getSkillsUpdateInfo({ remotionRoot, currentVersion });
12
26
  const pkgManager = (0, get_package_manager_1.getPackageManager)({
13
27
  remotionRoot,
14
28
  packageManager: undefined,
@@ -17,12 +31,14 @@ const isUpdateAvailable = async ({ remotionRoot, currentVersion, logLevel, }) =>
17
31
  });
18
32
  return {
19
33
  updateAvailable: semver_1.default.lt(currentVersion, latest),
34
+ ...skillsUpdateInfo,
20
35
  currentVersion,
21
36
  latestVersion: latest,
22
37
  timedOut: false,
23
38
  packageManager: pkgManager === 'unknown' ? 'unknown' : pkgManager.manager,
24
39
  };
25
40
  };
41
+ exports.isUpdateAvailable = isUpdateAvailable;
26
42
  const getRemotionVersion = () => {
27
43
  // careful when refactoring this file, path must be adjusted
28
44
  const packageJson = require('../../package.json');
@@ -32,6 +48,10 @@ const getRemotionVersion = () => {
32
48
  exports.getRemotionVersion = getRemotionVersion;
33
49
  const isUpdateAvailableWithTimeout = (remotionRoot, logLevel) => {
34
50
  const version = (0, exports.getRemotionVersion)();
51
+ const skillsUpdateInfo = getSkillsUpdateInfo({
52
+ remotionRoot,
53
+ currentVersion: version,
54
+ });
35
55
  const threeSecTimeout = new Promise((resolve) => {
36
56
  const pkgManager = (0, get_package_manager_1.getPackageManager)({
37
57
  remotionRoot,
@@ -44,6 +64,7 @@ const isUpdateAvailableWithTimeout = (remotionRoot, logLevel) => {
44
64
  currentVersion: version,
45
65
  latestVersion: version,
46
66
  updateAvailable: false,
67
+ ...skillsUpdateInfo,
47
68
  timedOut: true,
48
69
  packageManager: pkgManager === 'unknown' ? 'unknown' : pkgManager.manager,
49
70
  });
@@ -51,7 +72,12 @@ const isUpdateAvailableWithTimeout = (remotionRoot, logLevel) => {
51
72
  });
52
73
  return Promise.race([
53
74
  threeSecTimeout,
54
- isUpdateAvailable({ remotionRoot, currentVersion: version, logLevel }),
75
+ (0, exports.isUpdateAvailable)({
76
+ remotionRoot,
77
+ currentVersion: version,
78
+ logLevel,
79
+ getLatestVersion: null,
80
+ }),
55
81
  ]);
56
82
  };
57
83
  exports.isUpdateAvailableWithTimeout = isUpdateAvailableWithTimeout;
@@ -0,0 +1,2 @@
1
+ export declare const remotionSkillNames: readonly ["remotion-best-practices", "remotion-captions", "remotion-create", "remotion-docs", "remotion-interactivity", "remotion-maps", "remotion-markup", "remotion-multimedia", "remotion-render", "remotion-saas", "remotion-upgrade"];
2
+ export type RemotionSkillName = (typeof remotionSkillNames)[number];
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.remotionSkillNames = void 0;
4
+ exports.remotionSkillNames = [
5
+ 'remotion-best-practices',
6
+ 'remotion-captions',
7
+ 'remotion-create',
8
+ 'remotion-docs',
9
+ 'remotion-interactivity',
10
+ 'remotion-maps',
11
+ 'remotion-markup',
12
+ 'remotion-multimedia',
13
+ 'remotion-render',
14
+ 'remotion-saas',
15
+ 'remotion-upgrade',
16
+ ];
package/dist/routes.d.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ import type { DefaultEditor } from '@remotion/renderer';
2
3
  import type { GitSource, RenderDefaults, RenderJob, StudioRuntimeConfig } from '@remotion/studio-shared';
3
4
  import type { QueueMethods } from './preview-server/api-types';
4
5
  import type { LiveEventsServer } from './preview-server/live-events';
5
- export declare const handleRoutes: ({ staticHash, staticHashPrefix, outputHash, outputHashPrefix, request, response, liveEventsServer, getCurrentInputProps, getEnvVariables, remotionRoot, entryPoint, publicDir, logLevel, getRenderQueue, getRenderDefaults, getNumberOfAudioTags, queueMethods: methods, gitSource, binariesDirectory, getAudioLatencyHint, getPreviewSampleRate, enableCrossSiteIsolation, getStudioRuntimeConfig, configFile, }: {
6
+ export declare const handleRoutes: ({ staticHash, staticHashPrefix, outputHash, outputHashPrefix, request, response, liveEventsServer, getCurrentInputProps, getEnvVariables, remotionRoot, entryPoint, publicDir, logLevel, getRenderQueue, getRenderDefaults, getNumberOfAudioTags, queueMethods: methods, gitSource, binariesDirectory, getAudioLatencyHint, getPreviewSampleRate, enableCrossSiteIsolation, getStudioRuntimeConfig, getDefaultEditor, configFile, }: {
6
7
  staticHash: string;
7
8
  staticHashPrefix: string;
8
9
  outputHash: string;
@@ -26,5 +27,6 @@ export declare const handleRoutes: ({ staticHash, staticHashPrefix, outputHash,
26
27
  getPreviewSampleRate: () => number | null;
27
28
  enableCrossSiteIsolation: boolean;
28
29
  getStudioRuntimeConfig: () => StudioRuntimeConfig;
30
+ getDefaultEditor: () => DefaultEditor | null;
29
31
  configFile: string | null;
30
32
  }) => Promise<void>;