@remotion/studio-server 4.0.421 → 4.0.422

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/index.d.ts CHANGED
@@ -41,7 +41,12 @@ export declare const StudioServerInternals: {
41
41
  installCommand: string;
42
42
  startCommand: string;
43
43
  }[];
44
- getPackageManager: (remotionRoot: string, packageManager: string | undefined, dirUp: number) => {
44
+ getPackageManager: ({ remotionRoot, packageManager, dirUp, logLevel, }: {
45
+ remotionRoot: string;
46
+ packageManager: string | undefined;
47
+ dirUp: number;
48
+ logLevel: import("@remotion/renderer").LogLevel;
49
+ }) => {
45
50
  manager: import("@remotion/studio-shared").PackageManager;
46
51
  path: string;
47
52
  installCommand: string;
@@ -0,0 +1,37 @@
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
+ const bun_test_1 = require("bun:test");
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const node_os_1 = __importDefault(require("node:os"));
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ const get_package_manager_1 = require("../get-package-manager");
11
+ (0, bun_test_1.describe)('getPackageManager multiple lockfiles', () => {
12
+ let tempDir;
13
+ (0, bun_test_1.beforeEach)(() => {
14
+ tempDir = node_fs_1.default.mkdtempSync(node_path_1.default.join(node_os_1.default.tmpdir(), 'remotion-test-'));
15
+ });
16
+ (0, bun_test_1.afterEach)(() => {
17
+ node_fs_1.default.rmSync(tempDir, { recursive: true, force: true });
18
+ });
19
+ (0, bun_test_1.test)('should not throw error when multiple lockfiles are detected', () => {
20
+ node_fs_1.default.writeFileSync(node_path_1.default.join(tempDir, 'package-lock.json'), '{}');
21
+ node_fs_1.default.writeFileSync(node_path_1.default.join(tempDir, 'bun.lock'), '');
22
+ // Should not throw
23
+ const manager = (0, get_package_manager_1.getPackageManager)(tempDir, undefined, 0);
24
+ // Should return one of them (usually the first one in the list, which is npm)
25
+ (0, bun_test_1.expect)(manager).not.toBe('unknown');
26
+ if (typeof manager !== 'string') {
27
+ (0, bun_test_1.expect)(['npm', 'bun']).toContain(manager.manager);
28
+ }
29
+ });
30
+ (0, bun_test_1.test)('should return npm if only package-lock.json exists', () => {
31
+ node_fs_1.default.writeFileSync(node_path_1.default.join(tempDir, 'package-lock.json'), '{}');
32
+ const manager = (0, get_package_manager_1.getPackageManager)(tempDir, undefined, 0);
33
+ if (typeof manager !== 'string') {
34
+ (0, bun_test_1.expect)(manager.manager).toBe('npm');
35
+ }
36
+ });
37
+ });
@@ -1,3 +1,4 @@
1
+ import type { LogLevel } from '@remotion/renderer';
1
2
  import type { PackageManager } from '@remotion/studio-shared';
2
3
  type LockfilePath = {
3
4
  manager: PackageManager;
@@ -6,5 +7,10 @@ type LockfilePath = {
6
7
  startCommand: string;
7
8
  };
8
9
  export declare const lockFilePaths: LockfilePath[];
9
- export declare const getPackageManager: (remotionRoot: string, packageManager: string | undefined, dirUp: number) => LockfilePath | "unknown";
10
+ export declare const getPackageManager: ({ remotionRoot, packageManager, dirUp, logLevel, }: {
11
+ remotionRoot: string;
12
+ packageManager: string | undefined;
13
+ dirUp: number;
14
+ logLevel: LogLevel;
15
+ }) => LockfilePath | "unknown";
10
16
  export {};
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getPackageManager = exports.lockFilePaths = void 0;
7
+ const renderer_1 = require("@remotion/renderer");
7
8
  const node_fs_1 = __importDefault(require("node:fs"));
8
9
  const node_path_1 = __importDefault(require("node:path"));
9
10
  exports.lockFilePaths = [
@@ -38,7 +39,8 @@ exports.lockFilePaths = [
38
39
  startCommand: 'bunx remotion studio',
39
40
  },
40
41
  ];
41
- const getPackageManager = (remotionRoot, packageManager, dirUp) => {
42
+ let warnedAboutMultipleLockfiles = false;
43
+ const getPackageManager = ({ remotionRoot, packageManager, dirUp, logLevel, }) => {
42
44
  if (packageManager) {
43
45
  const manager = exports.lockFilePaths.find((p) => p.manager === packageManager);
44
46
  if (!manager) {
@@ -53,18 +55,21 @@ const getPackageManager = (remotionRoot, packageManager, dirUp) => {
53
55
  return 'unknown';
54
56
  }
55
57
  if (existingPkgManagers.length === 0) {
56
- return (0, exports.getPackageManager)(remotionRoot, packageManager, dirUp + 1);
58
+ return (0, exports.getPackageManager)({
59
+ remotionRoot,
60
+ packageManager,
61
+ dirUp: dirUp + 1,
62
+ logLevel,
63
+ });
57
64
  }
58
- if (existingPkgManagers.length > 1) {
59
- const error = [
60
- `Found multiple lockfiles:`,
61
- ...existingPkgManagers.map((m) => {
62
- return `- ${m.path}`;
63
- }),
64
- '',
65
- 'This can lead to bugs, delete all but one of these files and run this command again.',
66
- ].join('\n');
67
- throw new Error(error);
65
+ if (existingPkgManagers.length > 1 && !warnedAboutMultipleLockfiles) {
66
+ warnedAboutMultipleLockfiles = true;
67
+ renderer_1.RenderInternals.Log.warn({ indent: false, logLevel }, '⚠️ Multiple lockfiles detected:');
68
+ for (const pkgManager of existingPkgManagers) {
69
+ renderer_1.RenderInternals.Log.warn({ indent: false, logLevel }, ` - ${pkgManager.path}`);
70
+ }
71
+ renderer_1.RenderInternals.Log.warn({ indent: false, logLevel }, '');
72
+ renderer_1.RenderInternals.Log.warn({ indent: false, logLevel }, 'This can lead to bugs, delete all but one of these files.');
68
73
  }
69
74
  return existingPkgManagers[0];
70
75
  };
@@ -21,7 +21,12 @@ const handleInstallPackage = async ({ logLevel, remotionRoot, input: { packageNa
21
21
  return Promise.reject(new Error(`Package ${packageName} is not allowed to be installed.`));
22
22
  }
23
23
  }
24
- const manager = (0, get_package_manager_1.getPackageManager)(remotionRoot, undefined, 0);
24
+ const manager = (0, get_package_manager_1.getPackageManager)({
25
+ remotionRoot,
26
+ packageManager: undefined,
27
+ dirUp: 0,
28
+ logLevel,
29
+ });
25
30
  if (manager === 'unknown') {
26
31
  throw new Error(`No lockfile was found in your project (one of ${get_package_manager_1.lockFilePaths
27
32
  .map((p) => p.path)
@@ -2,8 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.handleUpdate = void 0;
4
4
  const update_available_1 = require("../update-available");
5
- const handleUpdate = async ({ remotionRoot }) => {
6
- const data = await (0, update_available_1.isUpdateAvailableWithTimeout)(remotionRoot);
5
+ const handleUpdate = async ({ remotionRoot, logLevel }) => {
6
+ const data = await (0, update_available_1.isUpdateAvailableWithTimeout)(remotionRoot, logLevel);
7
7
  return data;
8
8
  };
9
9
  exports.handleUpdate = handleUpdate;
@@ -1,3 +1,4 @@
1
+ import type { LogLevel } from '@remotion/renderer';
1
2
  import type { UpdateAvailableResponse } from '@remotion/studio-shared';
2
3
  export declare const getRemotionVersion: () => any;
3
- export declare const isUpdateAvailableWithTimeout: (remotionRoot: string) => Promise<UpdateAvailableResponse>;
4
+ export declare const isUpdateAvailableWithTimeout: (remotionRoot: string, logLevel: LogLevel) => Promise<UpdateAvailableResponse>;
@@ -7,9 +7,14 @@ exports.isUpdateAvailableWithTimeout = exports.getRemotionVersion = void 0;
7
7
  const semver_1 = __importDefault(require("semver"));
8
8
  const get_latest_remotion_version_1 = require("../get-latest-remotion-version");
9
9
  const get_package_manager_1 = require("./get-package-manager");
10
- const isUpdateAvailable = async ({ remotionRoot, currentVersion, }) => {
10
+ const isUpdateAvailable = async ({ remotionRoot, currentVersion, logLevel, }) => {
11
11
  const latest = await (0, get_latest_remotion_version_1.getLatestRemotionVersion)();
12
- const pkgManager = (0, get_package_manager_1.getPackageManager)(remotionRoot, undefined, 0);
12
+ const pkgManager = (0, get_package_manager_1.getPackageManager)({
13
+ remotionRoot,
14
+ packageManager: undefined,
15
+ dirUp: 0,
16
+ logLevel,
17
+ });
13
18
  return {
14
19
  updateAvailable: semver_1.default.lt(currentVersion, latest),
15
20
  currentVersion,
@@ -25,10 +30,15 @@ const getRemotionVersion = () => {
25
30
  return version;
26
31
  };
27
32
  exports.getRemotionVersion = getRemotionVersion;
28
- const isUpdateAvailableWithTimeout = (remotionRoot) => {
33
+ const isUpdateAvailableWithTimeout = (remotionRoot, logLevel) => {
29
34
  const version = (0, exports.getRemotionVersion)();
30
35
  const threeSecTimeout = new Promise((resolve) => {
31
- const pkgManager = (0, get_package_manager_1.getPackageManager)(remotionRoot, undefined, 0);
36
+ const pkgManager = (0, get_package_manager_1.getPackageManager)({
37
+ remotionRoot,
38
+ packageManager: undefined,
39
+ dirUp: 0,
40
+ logLevel,
41
+ });
32
42
  setTimeout(() => {
33
43
  resolve({
34
44
  currentVersion: version,
@@ -41,7 +51,7 @@ const isUpdateAvailableWithTimeout = (remotionRoot) => {
41
51
  });
42
52
  return Promise.race([
43
53
  threeSecTimeout,
44
- isUpdateAvailable({ remotionRoot, currentVersion: version }),
54
+ isUpdateAvailable({ remotionRoot, currentVersion: version, logLevel }),
45
55
  ]);
46
56
  };
47
57
  exports.isUpdateAvailableWithTimeout = isUpdateAvailableWithTimeout;
package/dist/routes.js CHANGED
@@ -81,7 +81,12 @@ const handleFallback = async ({ remotionRoot, hash, response, getCurrentInputPro
81
81
  response.setHeader('Cross-Origin-Opener-Policy', 'same-origin');
82
82
  response.setHeader('Cross-Origin-Embedder-Policy', 'require-corp');
83
83
  }
84
- const packageManager = (0, get_package_manager_1.getPackageManager)(remotionRoot, undefined, 0);
84
+ const packageManager = (0, get_package_manager_1.getPackageManager)({
85
+ remotionRoot,
86
+ packageManager: undefined,
87
+ dirUp: 0,
88
+ logLevel,
89
+ });
85
90
  (0, public_folder_1.fetchFolder)({ publicDir, staticHash: hash });
86
91
  const installedDependencies = (0, get_installed_installable_packages_1.getInstalledInstallablePackages)(remotionRoot);
87
92
  response.end(bundler_1.BundlerInternals.indexHtml({
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "url": "https://github.com/remotion-dev/remotion/tree/main/packages/studio-server"
4
4
  },
5
5
  "name": "@remotion/studio-server",
6
- "version": "4.0.421",
6
+ "version": "4.0.422",
7
7
  "description": "Run a Remotion Studio with a server backend",
8
8
  "main": "dist",
9
9
  "sideEffects": false,
@@ -25,11 +25,11 @@
25
25
  "dependencies": {
26
26
  "@babel/parser": "7.24.1",
27
27
  "semver": "7.5.3",
28
- "remotion": "4.0.421",
28
+ "remotion": "4.0.422",
29
29
  "recast": "0.23.11",
30
- "@remotion/bundler": "4.0.421",
31
- "@remotion/renderer": "4.0.421",
32
- "@remotion/studio-shared": "4.0.421",
30
+ "@remotion/bundler": "4.0.422",
31
+ "@remotion/renderer": "4.0.422",
32
+ "@remotion/studio-shared": "4.0.422",
33
33
  "memfs": "3.4.3",
34
34
  "source-map": "0.7.3",
35
35
  "open": "^8.4.2"
@@ -39,7 +39,7 @@
39
39
  "react": "19.2.3",
40
40
  "@babel/types": "7.24.0",
41
41
  "@types/semver": "^7.3.4",
42
- "@remotion/eslint-config-internal": "4.0.421",
42
+ "@remotion/eslint-config-internal": "4.0.422",
43
43
  "eslint": "9.19.0",
44
44
  "@types/node": "20.12.14"
45
45
  },