diff --git a/.claude/skills/pr/SKILL.md b/.claude/skills/pr/SKILL.md index e97c1aff67a..f814d9adfdf 100644 --- a/.claude/skills/pr/SKILL.md +++ b/.claude/skills/pr/SKILL.md @@ -13,10 +13,10 @@ bunx prettier --experimental-cli src --write Commit the changes, use the following format: ``` -[package-name]: [commit-message] +`[package-name]`: [commit-message] ``` -For example, `@remotion/shapes: Add heart shape`. +For example, "`@remotion/shapes`: Add heart shape". The package name must be obtained from package.json. If multiple packages are affected, use the one that you think if most relevant. diff --git a/bun.lock b/bun.lock index 923e2f43f7f..fdaea9ed43f 100644 --- a/bun.lock +++ b/bun.lock @@ -27,6 +27,7 @@ }, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", }, }, @@ -38,6 +39,7 @@ }, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", }, "peerDependencies": { @@ -80,6 +82,7 @@ "devDependencies": { "@remotion/bundler": "workspace:*", "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", "remotion": "workspace:*", }, @@ -104,6 +107,7 @@ }, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", "react": "catalog:", "react-dom": "catalog:", @@ -118,6 +122,7 @@ "version": "4.0.423", "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", }, }, @@ -137,7 +142,7 @@ "@remotion/studio": "workspace:*", "@remotion/studio-server": "workspace:*", "@remotion/studio-shared": "workspace:*", - "dotenv": "9.0.2", + "dotenv": "17.3.1", "minimist": "1.2.6", "prompts": "2.4.2", "remotion": "workspace:*", @@ -152,6 +157,7 @@ "@types/node": "catalog:", "@types/prettier": "^2.7.2", "@types/prompts": "^2.4.1", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", "react": "catalog:", "react-dom": "catalog:", @@ -184,6 +190,7 @@ "@remotion/eslint-config-internal": "workspace:*", "@types/minimist": "1.2.2", "@types/node": "catalog:", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", }, }, @@ -284,6 +291,7 @@ "@testing-library/dom": "10.4.0", "@testing-library/react": "16.1.0", "@types/dom-webcodecs": "catalog:", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", "happy-dom": "20.0.2", "react": "catalog:", @@ -314,6 +322,7 @@ "@types/minimist": "1.2.2", "@types/prompts": "^2.0.12", "@types/tar": "6.1.1", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", "react": "catalog:", }, @@ -334,6 +343,7 @@ "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", "@tailwindcss/cli": "4.1.1", + "@typescript/native-preview": "catalog:", "bun-plugin-tailwind": "0.1.2", "eslint": "catalog:", "react": "catalog:", @@ -475,6 +485,7 @@ }, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", }, }, @@ -489,6 +500,7 @@ "devDependencies": { "@remotion/bundler": "workspace:*", "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", }, "peerDependencies": { @@ -503,6 +515,7 @@ "@remotion/eslint-plugin": "workspace:*", "@typescript-eslint/eslint-plugin": "6.21.0", "@typescript-eslint/parser": "6.21.0", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", "eslint-plugin-react": "7.37.4", "eslint-plugin-react-hooks": "4.6.0", @@ -521,6 +534,7 @@ "@eslint/js": "9.19.0", "@remotion/eslint-config-internal": "workspace:*", "@remotion/eslint-plugin": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", "eslint-plugin-react": "7.37.4", "eslint-plugin-react-hooks": "5.2.0", @@ -544,6 +558,7 @@ }, "devDependencies": { "@types/eslint__eslintrc": "2.1.2", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", }, }, @@ -554,6 +569,7 @@ "@typescript-eslint/utils": "5.19.0", }, "devDependencies": { + "@typescript/native-preview": "catalog:", "eslint": "8.57.0", "vitest": "catalog:", }, @@ -617,7 +633,7 @@ "@types/web": "catalog:", "babel-loader": "^8.2.2", "css-loader": "5.2.7", - "dotenv": "9.0.2", + "dotenv": "17.3.1", "hls.js": "^0.14.17", "lottie-web": "5.13.0", "mediabunny": "catalog:", @@ -650,7 +666,8 @@ "version": "4.0.423", "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", - "dotenv": "9.0.2", + "@typescript/native-preview": "catalog:", + "dotenv": "17.3.1", "eslint": "catalog:", }, }, @@ -672,6 +689,7 @@ }, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", }, }, @@ -683,6 +701,7 @@ }, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "esbuild": "0.25.0", "eslint": "catalog:", "react": "catalog:", @@ -703,6 +722,7 @@ "devDependencies": { "@types/css-font-loading-module": "0.0.14", "@types/prettier": "^2.7.1", + "@typescript/native-preview": "catalog:", "postcss": "8.4.47", "prettier": "catalog:", }, @@ -715,6 +735,7 @@ }, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", }, }, @@ -792,6 +813,7 @@ "@types/minimist": "1.2.2", "@types/node": "catalog:", "@types/prompt": "^1.1.0", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", "express": "4.21.0", "mime-types": "2.1.34", @@ -819,6 +841,7 @@ "@remotion/serverless-client": "workspace:*", "@types/express": "^5.0.0", "@types/mime-types": "2.1.1", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", "express": "4.21.0", "mime-types": "2.1.34", @@ -847,7 +870,7 @@ "name": "@remotion/lambda-python", "version": "4.0.423", "dependencies": { - "dotenv": "9.0.2", + "dotenv": "17.3.1", }, "devDependencies": { "remotion": "workspace:*", @@ -865,6 +888,7 @@ "version": "4.0.423", "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", }, }, @@ -873,6 +897,7 @@ "version": "4.0.423", "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", "msw": "^2.7.1", "remotion": "workspace:*", @@ -904,6 +929,7 @@ }, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", "lottie-web": "5.13.0", "react": "catalog:", @@ -928,6 +954,7 @@ "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", "@types/command-line-args": "^5.2.3", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", }, }, @@ -962,6 +989,7 @@ "@remotion/example-videos": "workspace:*", "@types/bun": "catalog:", "@types/wicg-file-system-access": "2023.10.5", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", "mediabunny": "catalog:", }, @@ -977,6 +1005,7 @@ }, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", }, "peerDependencies": { @@ -992,6 +1021,7 @@ }, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", "react": "catalog:", "react-dom": "catalog:", @@ -1011,6 +1041,7 @@ }, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", }, }, @@ -1022,6 +1053,7 @@ }, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", "openai": "catalog:", }, @@ -1031,6 +1063,7 @@ "version": "4.0.423", "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", }, }, @@ -1044,6 +1077,7 @@ "@happy-dom/global-registrator": "14.5.1", "@remotion/eslint-config-internal": "workspace:*", "@testing-library/react": "16.1.0", + "@typescript/native-preview": "catalog:", "csstype": "^3.1.1", "eslint": "catalog:", "react": "catalog:", @@ -1082,6 +1116,7 @@ "version": "4.0.423", "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", }, }, @@ -1136,6 +1171,7 @@ "@remotion/web-renderer": "workspace:*", "@types/react": "18.3.1", "@types/react-dom": "18.3.1", + "@typescript/native-preview": "catalog:", "@vitejs/plugin-react": "catalog:", "@vitest/browser-playwright": "catalog:", "eslint": "catalog:", @@ -1198,6 +1234,7 @@ }, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", "react": "catalog:", "react-dom": "catalog:", @@ -1216,6 +1253,7 @@ }, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", }, }, @@ -1230,6 +1268,7 @@ }, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", }, }, @@ -1240,6 +1279,7 @@ "@remotion/eslint-config-internal": "workspace:*", "@remotion/renderer": "workspace:*", "@remotion/streaming": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", "remotion": "workspace:*", }, @@ -1254,6 +1294,7 @@ "@happy-dom/global-registrator": "14.5.1", "@remotion/eslint-config-internal": "workspace:*", "@testing-library/react": "16.1.0", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", "react": "catalog:", "react-dom": "catalog:", @@ -1274,6 +1315,7 @@ "@remotion/eslint-config-internal": "workspace:*", "@shopify/react-native-skia": "2.0.0", "@types/react-native": "^0.69.2", + "@typescript/native-preview": "catalog:", "canvaskit-wasm": "0.40.0", "eslint": "catalog:", "react": "catalog:", @@ -1309,6 +1351,7 @@ "version": "4.0.423", "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", }, }, @@ -1333,6 +1376,7 @@ "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", "@types/semver": "^7.3.4", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", "react": "catalog:", "react-dom": "catalog:", @@ -1362,6 +1406,7 @@ "@remotion/eslint-config-internal": "workspace:*", "@types/node": "catalog:", "@types/semver": "^7.3.4", + "@typescript/native-preview": "catalog:", "ast-types": "0.16.1", "eslint": "catalog:", "react": "catalog:", @@ -1376,6 +1421,7 @@ "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", "@remotion/renderer": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", }, }, @@ -1387,6 +1433,7 @@ }, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", }, }, @@ -1405,6 +1452,7 @@ "devDependencies": { "@remotion/bundler": "workspace:*", "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "autoprefixer": "10.4.20", "eslint": "catalog:", }, @@ -1427,6 +1475,7 @@ "devDependencies": { "@remotion/bundler": "workspace:*", "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", }, "peerDependencies": { @@ -1594,7 +1643,7 @@ "@types/web": "0.0.166", "@typescript-eslint/eslint-plugin": "8.46.0", "@typescript-eslint/parser": "8.46.0", - "dotenv": "16.0.3", + "dotenv": "17.3.1", "eslint": "9.19.0", "eslint-config-next": "15.1.6", "prettier": "3.6.0", @@ -1635,7 +1684,7 @@ "@typescript-eslint/eslint-plugin": "8.46.0", "@typescript-eslint/parser": "8.46.0", "autoprefixer": "10.4.20", - "dotenv": "16.0.3", + "dotenv": "17.3.1", "eslint": "9.19.0", "eslint-config-next": "15.1.6", "postcss": "8.4.47", @@ -1673,7 +1722,7 @@ "@types/web": "0.0.166", "@typescript-eslint/eslint-plugin": "8.46.0", "@typescript-eslint/parser": "8.46.0", - "dotenv": "16.0.3", + "dotenv": "17.3.1", "eslint": "9.19.0", "eslint-config-next": "15.1.6", "prettier": "3.6.0", @@ -1755,7 +1804,7 @@ "@typescript-eslint/eslint-plugin": "8.46.0", "@typescript-eslint/parser": "8.46.0", "autoprefixer": "10.4.20", - "dotenv": "16.0.3", + "dotenv": "17.3.1", "eslint": "9.19.0", "eslint-config-next": "15.1.6", "postcss": "8.4.47", @@ -1791,7 +1840,7 @@ "@types/web": "0.0.166", "@types/yargs": "^17.0.33", "chalk": "^5.6.2", - "dotenv": "^17.2.3", + "dotenv": "17.3.1", "eslint": "9.19.0", "ora": "^9.0.0", "prettier": "3.6.0", @@ -1836,7 +1885,7 @@ "@types/node": "20.12.14", "@types/react": "19.2.7", "@types/react-dom": "19.2.3", - "dotenv": "16.0.3", + "dotenv": "17.3.1", "eslint": "9.19.0", "prettier": "3.6.0", "tsx": "4.19.3", @@ -1984,7 +2033,7 @@ "@types/node": "20.12.14", "@types/react": "19.2.7", "@types/web": "0.0.166", - "dotenv": "16.0.3", + "dotenv": "17.3.1", "express": "4.21.0", "express-rate-limit": "5.3.0", "p-limit": "3.1.0", @@ -2092,7 +2141,7 @@ "@types/cors": "2.8.13", "@types/express": "4.17.13", "cors": "2.8.5", - "dotenv": "16.0.3", + "dotenv": "17.3.1", "express": "4.21.0", "firebase": "9.19.1", "md5": "2.3.0", @@ -2148,7 +2197,7 @@ "@typescript-eslint/eslint-plugin": "8.46.0", "@typescript-eslint/parser": "8.46.0", "autoprefixer": "10.4.20", - "dotenv": "16.0.3", + "dotenv": "17.3.1", "eslint": "9.19.0", "eslint-config-next": "15.1.6", "postcss": "8.4.47", @@ -2164,6 +2213,7 @@ "version": "4.0.423", "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", "react": "catalog:", "react-dom": "catalog:", @@ -2182,6 +2232,7 @@ "@types/react-reconciler": "0.32.0", "@types/three": "catalog:", "@types/web": "catalog:", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", "react": "catalog:", "react-dom": "catalog:", @@ -2209,6 +2260,7 @@ "@remotion/eslint-config-internal": "workspace:*", "@remotion/player": "workspace:*", "@remotion/test-utils": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", "react": "catalog:", "react-dom": "catalog:", @@ -2263,6 +2315,7 @@ "@remotion/eslint-config-internal": "workspace:*", "@remotion/example-videos": "workspace:*", "@types/dom-webcodecs": "catalog:", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", "playwright": "catalog:", "vite": "5.4.21", @@ -2276,6 +2329,7 @@ }, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", }, }, @@ -2287,6 +2341,7 @@ }, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", + "@typescript/native-preview": "catalog:", "eslint": "catalog:", "zod": "catalog:", }, @@ -2296,6 +2351,7 @@ }, }, "overrides": { + "@rspack/core": "1.7.6", "caniuse-lite": "1.0.30001766", }, "catalog": { @@ -2309,8 +2365,8 @@ "@aws-sdk/lib-storage": "3.986.0", "@aws-sdk/middleware-flexible-checksums": "3.972.5", "@aws-sdk/s3-request-presigner": "3.986.0", - "@mediabunny/ac3": "1.34.2", - "@mediabunny/mp3-encoder": "1.34.2", + "@mediabunny/ac3": "1.34.3", + "@mediabunny/mp3-encoder": "1.34.3", "@react-three/fiber": "9.2.0", "@types/bun": "1.3.3", "@types/dom-webcodecs": "0.1.11", @@ -2319,11 +2375,11 @@ "@types/react-dom": "19.2.3", "@types/three": "0.170.0", "@types/web": "0.0.166", - "@typescript/native-preview": "7.0.0-dev.20260105.1", + "@typescript/native-preview": "7.0.0-dev.20260217.1", "@vitejs/plugin-react": "4.1.0", "@vitest/browser-playwright": "4.0.9", "eslint": "9.19.0", - "mediabunny": "1.34.2", + "mediabunny": "1.34.3", "next": "16.1.5", "openai": "4.67.1", "playwright": "1.55.1", @@ -3248,9 +3304,9 @@ "@mdx-js/react": ["@mdx-js/react@2.3.0", "", { "dependencies": { "@types/mdx": "2.0.5", "@types/react": "19.0.0" }, "peerDependencies": { "react": "19.0.0" } }, "sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g=="], - "@mediabunny/ac3": ["@mediabunny/ac3@1.34.2", "", { "peerDependencies": { "mediabunny": "^1.0.0" } }, "sha512-Ej6Ns6/NcuvtajNxiK0rrGqnTD4JQETL2Ofrdnf5lQ2vxBEXT4Od9N+RUTxQbPRX9ZlWXpwvSZgf0sdCT0P1YA=="], + "@mediabunny/ac3": ["@mediabunny/ac3@1.34.3", "", { "peerDependencies": { "mediabunny": "^1.0.0" } }, "sha512-YpQN7dOQHbA3DX7Qt5DoWLcf8LDIHzO3i5jrl++GoCCbQQykS7L3Ea66oCKZCqlX42kLZhavPOgd0OXGFf+dEQ=="], - "@mediabunny/mp3-encoder": ["@mediabunny/mp3-encoder@1.34.2", "", { "peerDependencies": { "mediabunny": "^1.0.0" } }, "sha512-orRlKJBlhI6DizotCdYLqPuXn3H9S+rQM3GE/UX/F7z7oPAL4YTy2OVPAFxc0OMp1fmOAaiQZ8uTRYdM/m9pAg=="], + "@mediabunny/mp3-encoder": ["@mediabunny/mp3-encoder@1.34.3", "", { "peerDependencies": { "mediabunny": "^1.0.0" } }, "sha512-be3vYjGKSWRzKMfajGbdej6IjEE7fLHIONbOy9jhUO+57OF8ZCVH3SpG6zEuyZdnsJonEVqnyBkQkchHB2Q+Fg=="], "@mediafox/core": ["@mediafox/core@1.0.4", "", { "peerDependencies": { "mediabunny": "^1.23.0", "typescript": ">=5.0.0" } }, "sha512-1j8PKp835RUVzZt1vcymrgZqhaMobfP7SswbTisusvTgIZL8y5n2QFhSCnn7dze+a53VgnWyzkHOYdtVR1Gdew=="], @@ -3262,17 +3318,17 @@ "@modelcontextprotocol/sdk": ["@modelcontextprotocol/sdk@1.26.0", "", { "dependencies": { "@hono/node-server": "^1.19.9", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "content-type": "^1.0.5", "cors": "^2.8.5", "cross-spawn": "^7.0.5", "eventsource": "^3.0.2", "eventsource-parser": "^3.0.0", "express": "^5.2.1", "express-rate-limit": "^8.2.1", "hono": "^4.11.4", "jose": "^6.1.3", "json-schema-typed": "^8.0.2", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", "zod": "^3.25 || ^4.0", "zod-to-json-schema": "^3.25.1" }, "peerDependencies": { "@cfworker/json-schema": "^4.1.1" }, "optionalPeers": ["@cfworker/json-schema"] }, "sha512-Y5RmPncpiDtTXDbLKswIJzTqu2hyBKxTNsgKqKclDbhIgg1wgtf1fRuvxgTnRfcnxtvvgbIEcqUOzZrJ6iSReg=="], - "@module-federation/error-codes": ["@module-federation/error-codes@0.18.0", "", {}, "sha512-Woonm8ehyVIUPXChmbu80Zj6uJkC0dD9SJUZ/wOPtO8iiz/m+dkrOugAuKgoiR6qH4F+yorWila954tBz4uKsQ=="], + "@module-federation/error-codes": ["@module-federation/error-codes@0.22.0", "", {}, "sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug=="], - "@module-federation/runtime": ["@module-federation/runtime@0.18.0", "", { "dependencies": { "@module-federation/error-codes": "0.18.0", "@module-federation/runtime-core": "0.18.0", "@module-federation/sdk": "0.18.0" } }, "sha512-+C4YtoSztM7nHwNyZl6dQKGUVJdsPrUdaf3HIKReg/GQbrt9uvOlUWo2NXMZ8vDAnf/QRrpSYAwXHmWDn9Obaw=="], + "@module-federation/runtime": ["@module-federation/runtime@0.22.0", "", { "dependencies": { "@module-federation/error-codes": "0.22.0", "@module-federation/runtime-core": "0.22.0", "@module-federation/sdk": "0.22.0" } }, "sha512-38g5iPju2tPC3KHMPxRKmy4k4onNp6ypFPS1eKGsNLUkXgHsPMBFqAjDw96iEcjri91BrahG4XcdyKi97xZzlA=="], - "@module-federation/runtime-core": ["@module-federation/runtime-core@0.18.0", "", { "dependencies": { "@module-federation/error-codes": "0.18.0", "@module-federation/sdk": "0.18.0" } }, "sha512-ZyYhrDyVAhUzriOsVfgL6vwd+5ebYm595Y13KeMf6TKDRoUHBMTLGQ8WM4TDj8JNsy7LigncK8C03fn97of0QQ=="], + "@module-federation/runtime-core": ["@module-federation/runtime-core@0.22.0", "", { "dependencies": { "@module-federation/error-codes": "0.22.0", "@module-federation/sdk": "0.22.0" } }, "sha512-GR1TcD6/s7zqItfhC87zAp30PqzvceoeDGYTgF3Vx2TXvsfDrhP6Qw9T4vudDQL3uJRne6t7CzdT29YyVxlgIA=="], - "@module-federation/runtime-tools": ["@module-federation/runtime-tools@0.18.0", "", { "dependencies": { "@module-federation/runtime": "0.18.0", "@module-federation/webpack-bundler-runtime": "0.18.0" } }, "sha512-fSga9o4t1UfXNV/Kh6qFvRyZpPp3EHSPRISNeyT8ZoTpzDNiYzhtw0BPUSSD8m6C6XQh2s/11rI4g80UY+d+hA=="], + "@module-federation/runtime-tools": ["@module-federation/runtime-tools@0.22.0", "", { "dependencies": { "@module-federation/runtime": "0.22.0", "@module-federation/webpack-bundler-runtime": "0.22.0" } }, "sha512-4ScUJ/aUfEernb+4PbLdhM/c60VHl698Gn1gY21m9vyC1Ucn69fPCA1y2EwcCB7IItseRMoNhdcWQnzt/OPCNA=="], - "@module-federation/sdk": ["@module-federation/sdk@0.18.0", "", {}, "sha512-Lo/Feq73tO2unjmpRfyyoUkTVoejhItXOk/h5C+4cistnHbTV8XHrW/13fD5e1Iu60heVdAhhelJd6F898Ve9A=="], + "@module-federation/sdk": ["@module-federation/sdk@0.22.0", "", {}, "sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g=="], - "@module-federation/webpack-bundler-runtime": ["@module-federation/webpack-bundler-runtime@0.18.0", "", { "dependencies": { "@module-federation/runtime": "0.18.0", "@module-federation/sdk": "0.18.0" } }, "sha512-TEvErbF+YQ+6IFimhUYKK3a5wapD90d90sLsNpcu2kB3QGT7t4nIluE25duXuZDVUKLz86tEPrza/oaaCWTpvQ=="], + "@module-federation/webpack-bundler-runtime": ["@module-federation/webpack-bundler-runtime@0.22.0", "", { "dependencies": { "@module-federation/runtime": "0.22.0", "@module-federation/sdk": "0.22.0" } }, "sha512-aM8gCqXu+/4wBmJtVeMeeMN5guw3chf+2i6HajKtQv7SJfxV/f4IyNQJUeUQu9HfiAZHjqtMV5Lvq/Lvh8LdyA=="], "@monaco-editor/loader": ["@monaco-editor/loader@1.7.0", "", { "dependencies": { "state-local": "^1.0.6" } }, "sha512-gIwR1HrJrrx+vfyOhYmCZ0/JcWqG5kbfG7+d3f/C1LXk2EvzAbHSg3MQ5lO2sMlo9izoAZ04shohfKLVT6crVA=="], @@ -3740,31 +3796,31 @@ "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.40.1", "", { "os": "win32", "cpu": "x64" }, "sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA=="], - "@rspack/binding": ["@rspack/binding@1.5.8", "", { "optionalDependencies": { "@rspack/binding-darwin-arm64": "1.5.8", "@rspack/binding-darwin-x64": "1.5.8", "@rspack/binding-linux-arm64-gnu": "1.5.8", "@rspack/binding-linux-arm64-musl": "1.5.8", "@rspack/binding-linux-x64-gnu": "1.5.8", "@rspack/binding-linux-x64-musl": "1.5.8", "@rspack/binding-wasm32-wasi": "1.5.8", "@rspack/binding-win32-arm64-msvc": "1.5.8", "@rspack/binding-win32-ia32-msvc": "1.5.8", "@rspack/binding-win32-x64-msvc": "1.5.8" } }, "sha512-/91CzhRl9r5BIQCgGsS7jA6MDbw1I2BQpbfcUUdkdKl2P79K3Zo/Mw/TvKzS86catwLaUQEgkGRmYawOfPg7ow=="], + "@rspack/binding": ["@rspack/binding@1.7.6", "", { "optionalDependencies": { "@rspack/binding-darwin-arm64": "1.7.6", "@rspack/binding-darwin-x64": "1.7.6", "@rspack/binding-linux-arm64-gnu": "1.7.6", "@rspack/binding-linux-arm64-musl": "1.7.6", "@rspack/binding-linux-x64-gnu": "1.7.6", "@rspack/binding-linux-x64-musl": "1.7.6", "@rspack/binding-wasm32-wasi": "1.7.6", "@rspack/binding-win32-arm64-msvc": "1.7.6", "@rspack/binding-win32-ia32-msvc": "1.7.6", "@rspack/binding-win32-x64-msvc": "1.7.6" } }, "sha512-/NrEcfo8Gx22hLGysanrV6gHMuqZSxToSci/3M4kzEQtF5cPjfOv5pqeLK/+B6cr56ul/OmE96cCdWcXeVnFjQ=="], - "@rspack/binding-darwin-arm64": ["@rspack/binding-darwin-arm64@1.5.8", "", { "os": "darwin", "cpu": "arm64" }, "sha512-spJfpOSN3f7V90ic45/ET2NKB2ujAViCNmqb0iGurMNQtFRq+7Kd+jvVKKGXKBHBbsQrFhidSWbbqy2PBPGK8g=="], + "@rspack/binding-darwin-arm64": ["@rspack/binding-darwin-arm64@1.7.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-NZ9AWtB1COLUX1tA9HQQvWpTy07NSFfKBU8A6ylWd5KH8AePZztpNgLLAVPTuNO4CZXYpwcoclf8jG/luJcQdQ=="], - "@rspack/binding-darwin-x64": ["@rspack/binding-darwin-x64@1.5.8", "", { "os": "darwin", "cpu": "x64" }, "sha512-YFOzeL1IBknBcri8vjUp43dfUBylCeQnD+9O9p0wZmLAw7DtpN5JEOe2AkGo8kdTqJjYKI+cczJPKIw6lu1LWw=="], + "@rspack/binding-darwin-x64": ["@rspack/binding-darwin-x64@1.7.6", "", { "os": "darwin", "cpu": "x64" }, "sha512-J2g6xk8ZS7uc024dNTGTHxoFzFovAZIRixUG7PiciLKTMP78svbSSWrmW6N8oAsAkzYfJWwQpVgWfFNRHvYxSw=="], - "@rspack/binding-linux-arm64-gnu": ["@rspack/binding-linux-arm64-gnu@1.5.8", "", { "os": "linux", "cpu": "arm64" }, "sha512-UAWCsOnpkvy8eAVRo0uipbHXDhnoDq5zmqWTMhpga0/a3yzCp2e+fnjZb/qnFNYb5MeL0O1mwMOYgn1M3oHILQ=="], + "@rspack/binding-linux-arm64-gnu": ["@rspack/binding-linux-arm64-gnu@1.7.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-eQfcsaxhFrv5FmtaA7+O1F9/2yFDNIoPZzV/ZvqvFz5bBXVc4FAm/1fVpBg8Po/kX1h0chBc7Xkpry3cabFW8w=="], - "@rspack/binding-linux-arm64-musl": ["@rspack/binding-linux-arm64-musl@1.5.8", "", { "os": "linux", "cpu": "arm64" }, "sha512-GnSvGT4GjokPSD45cTtE+g7LgghuxSP1MRmvd+Vp/I8pnxTVSTsebRod4TAqyiv+l11nuS8yqNveK9qiOkBLWw=="], + "@rspack/binding-linux-arm64-musl": ["@rspack/binding-linux-arm64-musl@1.7.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-DfQXKiyPIl7i1yECHy4eAkSmlUzzsSAbOjgMuKn7pudsWf483jg0UUYutNgXSlBjc/QSUp7906Cg8oty9OfwPA=="], - "@rspack/binding-linux-x64-gnu": ["@rspack/binding-linux-x64-gnu@1.5.8", "", { "os": "linux", "cpu": "x64" }, "sha512-XLxh5n/pzUfxsugz/8rVBv+Tx2nqEM+9rharK69kfooDsQNKyz7PANllBQ/v4svJ+W0BRHnDL4qXSGdteZeEjA=="], + "@rspack/binding-linux-x64-gnu": ["@rspack/binding-linux-x64-gnu@1.7.6", "", { "os": "linux", "cpu": "x64" }, "sha512-NdA+2X3lk2GGrMMnTGyYTzM3pn+zNjaqXqlgKmFBXvjfZqzSsKq3pdD1KHZCd5QHN+Fwvoszj0JFsquEVhE1og=="], - "@rspack/binding-linux-x64-musl": ["@rspack/binding-linux-x64-musl@1.5.8", "", { "os": "linux", "cpu": "x64" }, "sha512-gE0+MZmwF+01p9/svpEESkzkLpBkVUG2o03YMpwXYC/maeRRhWvF8BJ7R3i/Ls/jFGSE87dKX5NbRLVzqksq/w=="], + "@rspack/binding-linux-x64-musl": ["@rspack/binding-linux-x64-musl@1.7.6", "", { "os": "linux", "cpu": "x64" }, "sha512-rEy6MHKob02t/77YNgr6dREyJ0e0tv1X6Xsg8Z5E7rPXead06zefUbfazj4RELYySWnM38ovZyJAkPx/gOn3VA=="], - "@rspack/binding-wasm32-wasi": ["@rspack/binding-wasm32-wasi@1.5.8", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.0.5" }, "cpu": "none" }, "sha512-cfg3niNHeJuxuml1Vy9VvaJrI/5TakzoaZvKX2g5S24wfzR50Eyy4JAsZ+L2voWQQp1yMJbmPYPmnTCTxdJQBQ=="], + "@rspack/binding-wasm32-wasi": ["@rspack/binding-wasm32-wasi@1.7.6", "", { "dependencies": { "@napi-rs/wasm-runtime": "1.0.7" }, "cpu": "none" }, "sha512-YupOrz0daSG+YBbCIgpDgzfMM38YpChv+afZpaxx5Ml7xPeAZIIdgWmLHnQ2rts73N2M1NspAiBwV00Xx0N4Vg=="], - "@rspack/binding-win32-arm64-msvc": ["@rspack/binding-win32-arm64-msvc@1.5.8", "", { "os": "win32", "cpu": "arm64" }, "sha512-7i3ZTHFXKfU/9Jm9XhpMkrdkxO7lfeYMNVEGkuU5dyBfRMQj69dRgPL7zJwc2plXiqu9LUOl+TwDNTjap7Q36g=="], + "@rspack/binding-win32-arm64-msvc": ["@rspack/binding-win32-arm64-msvc@1.7.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-INj7aVXjBvlZ84kEhSK4kJ484ub0i+BzgnjDWOWM1K+eFYDZjLdAsQSS3fGGXwVc3qKbPIssFfnftATDMTEJHQ=="], - "@rspack/binding-win32-ia32-msvc": ["@rspack/binding-win32-ia32-msvc@1.5.8", "", { "os": "win32", "cpu": "ia32" }, "sha512-7ZPPWO11J+soea1+mnfaPpQt7GIodBM7A86dx6PbXgVEoZmetcWPrCF2NBfXxQWOKJ9L3RYltC4z+ZyXRgMOrw=="], + "@rspack/binding-win32-ia32-msvc": ["@rspack/binding-win32-ia32-msvc@1.7.6", "", { "os": "win32", "cpu": "ia32" }, "sha512-lXGvC+z67UMcw58In12h8zCa9IyYRmuptUBMItQJzu+M278aMuD1nETyGLL7e4+OZ2lvrnnBIcjXN1hfw2yRzw=="], - "@rspack/binding-win32-x64-msvc": ["@rspack/binding-win32-x64-msvc@1.5.8", "", { "os": "win32", "cpu": "x64" }, "sha512-N/zXQgzIxME3YUzXT8qnyzxjqcnXudWOeDh8CAG9zqTCnCiy16SFfQ/cQgEoLlD9geQntV6jx2GbDDI5kpDGMQ=="], + "@rspack/binding-win32-x64-msvc": ["@rspack/binding-win32-x64-msvc@1.7.6", "", { "os": "win32", "cpu": "x64" }, "sha512-zeUxEc0ZaPpmaYlCeWcjSJUPuRRySiSHN23oJ2Xyw0jsQ01Qm4OScPdr0RhEOFuK/UE+ANyRtDo4zJsY52Hadw=="], - "@rspack/core": ["@rspack/core@1.5.8", "", { "dependencies": { "@module-federation/runtime-tools": "0.18.0", "@rspack/binding": "1.5.8", "@rspack/lite-tapable": "1.0.1" }, "peerDependencies": { "@swc/helpers": ">=0.5.1" }, "optionalPeers": ["@swc/helpers"] }, "sha512-sUd2LfiDhqYVfvknuoz0+/c+wSpn693xotnG5g1CSWKZArbtwiYzBIVnNlcHGmuoBRsnj/TkSq8dTQ7gwfBroQ=="], + "@rspack/core": ["@rspack/core@1.7.6", "", { "dependencies": { "@module-federation/runtime-tools": "0.22.0", "@rspack/binding": "1.7.6", "@rspack/lite-tapable": "1.1.0" }, "peerDependencies": { "@swc/helpers": ">=0.5.1" }, "optionalPeers": ["@swc/helpers"] }, "sha512-Iax6UhrfZqJajA778c1d5DBFbSIqPOSrI34kpNIiNpWd8Jq7mFIa+Z60SQb5ZQDZuUxcCZikjz5BxinFjTkg7Q=="], - "@rspack/lite-tapable": ["@rspack/lite-tapable@1.0.1", "", {}, "sha512-VynGOEsVw2s8TAlLf/uESfrgfrq2+rcXB1muPJYBWbsm1Oa6r5qVQhjA5ggM6z/coYPrsVMgovl3Ff7Q7OCp1w=="], + "@rspack/lite-tapable": ["@rspack/lite-tapable@1.1.0", "", {}, "sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw=="], "@rtsao/scc": ["@rtsao/scc@1.1.0", "", {}, "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g=="], @@ -4536,21 +4592,21 @@ "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@6.21.0", "", { "dependencies": { "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "3.4.3" } }, "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A=="], - "@typescript/native-preview": ["@typescript/native-preview@7.0.0-dev.20260105.1", "", { "optionalDependencies": { "@typescript/native-preview-darwin-arm64": "7.0.0-dev.20260105.1", "@typescript/native-preview-darwin-x64": "7.0.0-dev.20260105.1", "@typescript/native-preview-linux-arm": "7.0.0-dev.20260105.1", "@typescript/native-preview-linux-arm64": "7.0.0-dev.20260105.1", "@typescript/native-preview-linux-x64": "7.0.0-dev.20260105.1", "@typescript/native-preview-win32-arm64": "7.0.0-dev.20260105.1", "@typescript/native-preview-win32-x64": "7.0.0-dev.20260105.1" }, "bin": { "tsgo": "bin/tsgo.js" } }, "sha512-PjmhqnN/jRDLxG/5EuCe8AlW1QUEOjcDJQsxarQmMbrdW5DbSDnYUvWbYbJescXefeK0v3FUQmp7HAOCFQ7I/w=="], + "@typescript/native-preview": ["@typescript/native-preview@7.0.0-dev.20260217.1", "", { "optionalDependencies": { "@typescript/native-preview-darwin-arm64": "7.0.0-dev.20260217.1", "@typescript/native-preview-darwin-x64": "7.0.0-dev.20260217.1", "@typescript/native-preview-linux-arm": "7.0.0-dev.20260217.1", "@typescript/native-preview-linux-arm64": "7.0.0-dev.20260217.1", "@typescript/native-preview-linux-x64": "7.0.0-dev.20260217.1", "@typescript/native-preview-win32-arm64": "7.0.0-dev.20260217.1", "@typescript/native-preview-win32-x64": "7.0.0-dev.20260217.1" }, "bin": { "tsgo": "bin/tsgo.js" } }, "sha512-czUniBl1MsempdDkeDwfKThhHkeQzyLxn2aVcsCTSk2Ys84M8yy2eRdUZQrufwLL1Etcz+bv3SvZbBMcnPk/Ig=="], - "@typescript/native-preview-darwin-arm64": ["@typescript/native-preview-darwin-arm64@7.0.0-dev.20260105.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-d+CJrdiElzHuckgsXLHlBRLbHsgzWqQuSVOZ/raF6cvBKjylnphNPx+CdtOpZrBCic0M30Q/UfTV6StMDhjIrQ=="], + "@typescript/native-preview-darwin-arm64": ["@typescript/native-preview-darwin-arm64@7.0.0-dev.20260217.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Mj8Mh+aTaGWURK65VuMxyOBhy+9OfXCHCL63zJPr/PqTNKub+GgGpGYKfSlbDBkqkB8UgURlI2CDRUoyOfvufQ=="], - "@typescript/native-preview-darwin-x64": ["@typescript/native-preview-darwin-x64@7.0.0-dev.20260105.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-ntgJZDSNh7tqw2bfBuEEqhwUbuALLTLY4E/pLdCC8vaL/2QrNcTuDZX23hcLa7pQL6ML2OVvEH1MC7A1BUO/WA=="], + "@typescript/native-preview-darwin-x64": ["@typescript/native-preview-darwin-x64@7.0.0-dev.20260217.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-txn4CJ7/zj+WcSdDL5nshs9he7M0DF5qZBU5glWAJP+uIZmRSyuxDoWZqtjrzmX+vs5IOzyKgYcDsBYFkjybwA=="], - "@typescript/native-preview-linux-arm": ["@typescript/native-preview-linux-arm@7.0.0-dev.20260105.1", "", { "os": "linux", "cpu": "arm" }, "sha512-Pv8aEc9OKG++9dPzyWwZRXt1WEHH7saAYpGrYWKnR0mMDt8yRRPX2g9ReCSFLJ/9ji3nvBg3n/wUXDXOdMQDDg=="], + "@typescript/native-preview-linux-arm": ["@typescript/native-preview-linux-arm@7.0.0-dev.20260217.1", "", { "os": "linux", "cpu": "arm" }, "sha512-gw+O550PhazyzsAi/oq1xztMM1PWSXtxq38tN15e/dRh0BXOt0bDUoEgIzFD0L5OkmiOlEIknROqvAVNa4QH3g=="], - "@typescript/native-preview-linux-arm64": ["@typescript/native-preview-linux-arm64@7.0.0-dev.20260105.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-uBj+8EPCZ8bFSosovwmgF16r4NXHgq0Wc3Ddg48KDqUl9njsVjWbg6jv3H5OXm7nnLKgRzmq9B30cHuWhlKsMg=="], + "@typescript/native-preview-linux-arm64": ["@typescript/native-preview-linux-arm64@7.0.0-dev.20260217.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-aGCr3/g1ktJ+IRjLEWTdNmG3H2iwPWt9tBu7spRnIIvDcdlEHFf8NQ2Mwn3n54bVnXAN5nYxZmM7WEYYfNvD6w=="], - "@typescript/native-preview-linux-x64": ["@typescript/native-preview-linux-x64@7.0.0-dev.20260105.1", "", { "os": "linux", "cpu": "x64" }, "sha512-vy1IpYseSpIP6X0TKnejwKH75LO06VfI7DRV9ShqgHC6Ybd7AdrTrXlna13sFF6FuD8vd3ZefesbS4n4d0Ywzw=="], + "@typescript/native-preview-linux-x64": ["@typescript/native-preview-linux-x64@7.0.0-dev.20260217.1", "", { "os": "linux", "cpu": "x64" }, "sha512-KAE4W+5VVRagA+xI6AxCSMVx2zb+8t15lMcB1cH5rIU2ZpnYa8K2ZXpSRMZGKNIFzcg6tKF9RyZvh4zMwZDnkQ=="], - "@typescript/native-preview-win32-arm64": ["@typescript/native-preview-win32-arm64@7.0.0-dev.20260105.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-EFSpj3zgVsYTztgeuxhOlOpx0hr2vTVxPyccEHfiseMcAjkAsbdoSeYSLZFZyW2JXqJtq6N3YWsGGKzoyP0f+Q=="], + "@typescript/native-preview-win32-arm64": ["@typescript/native-preview-win32-arm64@7.0.0-dev.20260217.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-KUYWl+0tYShKoFKp0BAxECmLClT7qnhN5UEW9tsSih9tDka//qnQcWFx452Rw3fiQCqXjkntgwFFXrrvltQMpQ=="], - "@typescript/native-preview-win32-x64": ["@typescript/native-preview-win32-x64@7.0.0-dev.20260105.1", "", { "os": "win32", "cpu": "x64" }, "sha512-UK0+xTxu6UZA8isOThWT9LOAl6LB1WyYFLC0ijno4SWwQCIbnJi3wjnAkBxRyM8h46DUaDYpXfHVkpYwhdExhg=="], + "@typescript/native-preview-win32-x64": ["@typescript/native-preview-win32-x64@7.0.0-dev.20260217.1", "", { "os": "win32", "cpu": "x64" }, "sha512-bje8xm+b0q3OSCY01/MZdDBnVISURunL9rCAob8pAu8qtRMvKYGWUsYwTH+fXGUViPAmdlafFd2E82K9VJYmHA=="], "@typescript/twoslash": ["@typescript/twoslash@3.2.1", "", { "dependencies": { "@typescript/vfs": "1.4.0", "debug": "4.4.0", "lz-string": "1.5.0" } }, "sha512-tS4gLwOe1WCDspqBXhQCb2ESUqzEd1tOkmKpiZ1O+W1x+9l+9njETuXFkLErtH9is/uD1GSvClDjk/tEOJktjQ=="], @@ -5250,7 +5306,7 @@ "dot-prop": ["dot-prop@6.0.1", "", { "dependencies": { "is-obj": "2.0.0" } }, "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA=="], - "dotenv": ["dotenv@9.0.2", "", {}, "sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg=="], + "dotenv": ["dotenv@17.3.1", "", {}, "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA=="], "draco3d": ["draco3d@1.4.3", "", {}, "sha512-D7IipIMa04k0rhEPU8SJZVcpXP3JOPaLR+nai0a9+OltsnkLMmVmpAEe1DXXOEf6eSIvKqTAEPLdZZ8G+bC/8w=="], @@ -6162,7 +6218,7 @@ "media-typer": ["media-typer@0.3.0", "", {}, "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="], - "mediabunny": ["mediabunny@1.34.2", "", { "dependencies": { "@types/dom-mediacapture-transform": "^0.1.11", "@types/dom-webcodecs": "0.1.13" } }, "sha512-Mr9VhiqH2RRwc3vR6rk8ca/58HhstP+c25PjtZmZvmCw21ibWSNqpinvBREfJmY+hpNGnG9dUmbJ4WqLMDWO0g=="], + "mediabunny": ["mediabunny@1.34.3", "", { "dependencies": { "@types/dom-mediacapture-transform": "^0.1.11", "@types/dom-webcodecs": "0.1.13" } }, "sha512-Jb0x3jyvadGVpo8aZSn53NZduPbPdbx9foQsAGOmKBz7Hai9B38Kf+7eXbxXFcXoXxcTyNaZeDhoA0agoBQldA=="], "memfs": ["memfs@3.4.3", "", { "dependencies": { "fs-monkey": "1.0.3" } }, "sha512-eivjfi7Ahr6eQTn44nvTnR60e4a1Fs1Via2kCR5lHo/kyNoiMWaXCNJ/GpSd0ilXas2JSOl9B5FTIhflXu0hlg=="], @@ -10388,18 +10444,16 @@ "template-ai-video/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - "template-ai-video/dotenv": ["dotenv@17.2.3", "", {}, "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w=="], - "template-ai-video/uuid": ["uuid@13.0.0", "", { "bin": { "uuid": "dist-node/bin/uuid" } }, "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w=="], + "template-music-visualization/mediabunny": ["mediabunny@1.34.2", "", { "dependencies": { "@types/dom-mediacapture-transform": "^0.1.11", "@types/dom-webcodecs": "0.1.13" } }, "sha512-Mr9VhiqH2RRwc3vR6rk8ca/58HhstP+c25PjtZmZvmCw21ibWSNqpinvBREfJmY+hpNGnG9dUmbJ4WqLMDWO0g=="], + "template-next-app/@eslint/js": ["@eslint/js@9.38.0", "", {}, "sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A=="], "template-next-app/@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.46.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.46.0", "@typescript-eslint/type-utils": "8.46.0", "@typescript-eslint/utils": "8.46.0", "@typescript-eslint/visitor-keys": "8.46.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.46.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-hA8gxBq4ukonVXPy0OKhiaUh/68D0E88GSmtC1iAEnGaieuDi38LhS7jdCHRLi6ErJBNDGCzvh5EnzdPwUc0DA=="], "template-next-app/@typescript-eslint/parser": ["@typescript-eslint/parser@8.46.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.46.0", "@typescript-eslint/types": "8.46.0", "@typescript-eslint/typescript-estree": "8.46.0", "@typescript-eslint/visitor-keys": "8.46.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-n1H6IcDhmmUEG7TNVSspGmiHHutt7iVKtZwRppD7e04wha5MrkV1h3pti9xQLcCMt6YWsncpoT0HMjkH1FNwWQ=="], - "template-next-app/dotenv": ["dotenv@16.0.3", "", {}, "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ=="], - "template-next-app/typescript-eslint": ["typescript-eslint@8.46.0", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.46.0", "@typescript-eslint/parser": "8.46.0", "@typescript-eslint/typescript-estree": "8.46.0", "@typescript-eslint/utils": "8.46.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-6+ZrB6y2bT2DX3K+Qd9vn7OFOJR+xSLDj+Aw/N3zBwUt27uTw2sw2TE2+UcY1RiyBZkaGbTkVg9SSdPNUG6aUw=="], "template-next-app-tailwind/@eslint/js": ["@eslint/js@9.38.0", "", {}, "sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A=="], @@ -10408,8 +10462,6 @@ "template-next-app-tailwind/@typescript-eslint/parser": ["@typescript-eslint/parser@8.46.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.46.0", "@typescript-eslint/types": "8.46.0", "@typescript-eslint/typescript-estree": "8.46.0", "@typescript-eslint/visitor-keys": "8.46.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-n1H6IcDhmmUEG7TNVSspGmiHHutt7iVKtZwRppD7e04wha5MrkV1h3pti9xQLcCMt6YWsncpoT0HMjkH1FNwWQ=="], - "template-next-app-tailwind/dotenv": ["dotenv@16.0.3", "", {}, "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ=="], - "template-next-app-tailwind/tailwind-merge": ["tailwind-merge@3.0.1", "", {}, "sha512-AvzE8FmSoXC7nC+oU5GlQJbip2UO7tmOhOfQyOmPhrStOGXHU08j8mZEHZ4BmCqY5dWTCo4ClWkNyRNx1wpT0g=="], "template-next-app-tailwind/tailwindcss": ["tailwindcss@4.0.3", "", {}, "sha512-ImmZF0Lon5RrQpsEAKGxRvHwCvMgSC4XVlFRqmbzTEDb/3wvin9zfEZrMwgsa3yqBbPqahYcVI6lulM2S7IZAA=="], @@ -10422,8 +10474,6 @@ "template-next-pages/@typescript-eslint/parser": ["@typescript-eslint/parser@8.46.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.46.0", "@typescript-eslint/types": "8.46.0", "@typescript-eslint/typescript-estree": "8.46.0", "@typescript-eslint/visitor-keys": "8.46.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-n1H6IcDhmmUEG7TNVSspGmiHHutt7iVKtZwRppD7e04wha5MrkV1h3pti9xQLcCMt6YWsncpoT0HMjkH1FNwWQ=="], - "template-next-pages/dotenv": ["dotenv@16.0.3", "", {}, "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ=="], - "template-next-pages/typescript-eslint": ["typescript-eslint@8.46.0", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.46.0", "@typescript-eslint/parser": "8.46.0", "@typescript-eslint/typescript-estree": "8.46.0", "@typescript-eslint/utils": "8.46.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-6+ZrB6y2bT2DX3K+Qd9vn7OFOJR+xSLDj+Aw/N3zBwUt27uTw2sw2TE2+UcY1RiyBZkaGbTkVg9SSdPNUG6aUw=="], "template-prompt-to-motion-graphics/@eslint/js": ["@eslint/js@9.38.0", "", {}, "sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A=="], @@ -10438,8 +10488,6 @@ "template-prompt-to-motion-graphics/@typescript-eslint/parser": ["@typescript-eslint/parser@8.46.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.46.0", "@typescript-eslint/types": "8.46.0", "@typescript-eslint/typescript-estree": "8.46.0", "@typescript-eslint/visitor-keys": "8.46.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-n1H6IcDhmmUEG7TNVSspGmiHHutt7iVKtZwRppD7e04wha5MrkV1h3pti9xQLcCMt6YWsncpoT0HMjkH1FNwWQ=="], - "template-prompt-to-motion-graphics/dotenv": ["dotenv@16.0.3", "", {}, "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ=="], - "template-prompt-to-motion-graphics/lucide-react": ["lucide-react@0.555.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-D8FvHUGbxWBRQM90NZeIyhAvkFfsh3u9ekrMvJ30Z6gnpBHS6HC6ldLg7tL45hwiIz/u66eKDtdA23gwwGsAHA=="], "template-prompt-to-motion-graphics/react": ["react@19.2.1", "", {}, "sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw=="], @@ -10454,8 +10502,6 @@ "template-prompt-to-motion-graphics/zod": ["zod@4.1.13", "", {}, "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig=="], - "template-react-router/dotenv": ["dotenv@16.0.3", "", {}, "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ=="], - "template-react-router/tailwind-merge": ["tailwind-merge@3.0.1", "", {}, "sha512-AvzE8FmSoXC7nC+oU5GlQJbip2UO7tmOhOfQyOmPhrStOGXHU08j8mZEHZ4BmCqY5dWTCo4ClWkNyRNx1wpT0g=="], "template-react-router/tailwindcss": ["tailwindcss@4.0.0", "", {}, "sha512-ULRPI3A+e39T7pSaf1xoi58AqqJxVCLg8F/uM5A3FadUbnyDTgltVnXJvdkTjwCOGA6NazqHVcwPJC5h2vRYVQ=="], @@ -10480,6 +10526,8 @@ "template-recorder/lucide-react": ["lucide-react@0.516.0", "", { "peerDependencies": { "react": "19.0.0" } }, "sha512-aybBJzLHcw1CIn3rUcRkztB37dsJATtpffLNX+0/w+ws2p21nYIlOwX/B5fqxq8F/BjqVemnJX8chKwRidvROg=="], + "template-recorder/mediabunny": ["mediabunny@1.34.2", "", { "dependencies": { "@types/dom-mediacapture-transform": "^0.1.11", "@types/dom-webcodecs": "0.1.13" } }, "sha512-Mr9VhiqH2RRwc3vR6rk8ca/58HhstP+c25PjtZmZvmCw21ibWSNqpinvBREfJmY+hpNGnG9dUmbJ4WqLMDWO0g=="], + "template-recorder/postcss": ["postcss@8.4.31", "", { "dependencies": { "nanoid": "3.3.11", "picocolors": "1.1.1", "source-map-js": "1.2.1" } }, "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ=="], "template-recorder/prettier-plugin-organize-imports": ["prettier-plugin-organize-imports@3.2.3", "", { "peerDependencies": { "prettier": "3.6.0", "typescript": "5.8.2" } }, "sha512-KFvk8C/zGyvUaE3RvxN2MhCLwzV6OBbFSkwZ2OamCrs9ZY4i5L77jQ/w4UmUr+lqX8qbaqVq6bZZkApn+IgJSg=="], @@ -10496,16 +10544,14 @@ "template-still/@types/express": ["@types/express@4.17.13", "", { "dependencies": { "@types/body-parser": "1.19.1", "@types/express-serve-static-core": "4.17.35", "@types/qs": "6.9.7", "@types/serve-static": "1.13.10" } }, "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA=="], - "template-still/dotenv": ["dotenv@16.0.3", "", {}, "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ=="], - "template-still/p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], + "template-three/mediabunny": ["mediabunny@1.34.2", "", { "dependencies": { "@types/dom-mediacapture-transform": "^0.1.11", "@types/dom-webcodecs": "0.1.13" } }, "sha512-Mr9VhiqH2RRwc3vR6rk8ca/58HhstP+c25PjtZmZvmCw21ibWSNqpinvBREfJmY+hpNGnG9dUmbJ4WqLMDWO0g=="], + "template-tts-azure/tsx": ["tsx@4.19.3", "", { "dependencies": { "esbuild": "0.25.0", "get-tsconfig": "4.8.1" }, "optionalDependencies": { "fsevents": "2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ=="], "template-tts-google/@types/express": ["@types/express@4.17.13", "", { "dependencies": { "@types/body-parser": "1.19.1", "@types/express-serve-static-core": "4.17.35", "@types/qs": "6.9.7", "@types/serve-static": "1.13.10" } }, "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA=="], - "template-tts-google/dotenv": ["dotenv@16.0.3", "", {}, "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ=="], - "template-tts-google/tsx": ["tsx@4.19.3", "", { "dependencies": { "esbuild": "0.25.0", "get-tsconfig": "4.8.1" }, "optionalDependencies": { "fsevents": "2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ=="], "template-vercel/@eslint/js": ["@eslint/js@9.38.0", "", {}, "sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A=="], @@ -10514,8 +10560,6 @@ "template-vercel/@typescript-eslint/parser": ["@typescript-eslint/parser@8.46.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.46.0", "@typescript-eslint/types": "8.46.0", "@typescript-eslint/typescript-estree": "8.46.0", "@typescript-eslint/visitor-keys": "8.46.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-n1H6IcDhmmUEG7TNVSspGmiHHutt7iVKtZwRppD7e04wha5MrkV1h3pti9xQLcCMt6YWsncpoT0HMjkH1FNwWQ=="], - "template-vercel/dotenv": ["dotenv@16.0.3", "", {}, "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ=="], - "template-vercel/tailwind-merge": ["tailwind-merge@3.0.1", "", {}, "sha512-AvzE8FmSoXC7nC+oU5GlQJbip2UO7tmOhOfQyOmPhrStOGXHU08j8mZEHZ4BmCqY5dWTCo4ClWkNyRNx1wpT0g=="], "template-vercel/tailwindcss": ["tailwindcss@4.0.3", "", {}, "sha512-ImmZF0Lon5RrQpsEAKGxRvHwCvMgSC4XVlFRqmbzTEDb/3wvin9zfEZrMwgsa3yqBbPqahYcVI6lulM2S7IZAA=="], @@ -13388,6 +13432,8 @@ "teeny-request/https-proxy-agent/debug": ["debug@4.4.1", "", { "dependencies": { "ms": "2.1.3" } }, "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ=="], + "template-music-visualization/mediabunny/@types/dom-webcodecs": ["@types/dom-webcodecs@0.1.13", "", {}, "sha512-O5hkiFIcjjszPIYyUSyvScyvrBoV3NOEEZx/pMlsu44TKzWNkLVBBxnxJz42in5n3QIolYOcBYFCPZZ0h8SkwQ=="], + "template-next-app-tailwind/@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.46.0", "", { "dependencies": { "@typescript-eslint/types": "8.46.0", "@typescript-eslint/visitor-keys": "8.46.0" } }, "sha512-lWETPa9XGcBes4jqAMYD9fW0j4n6hrPtTJwWDmtqgFO/4HF4jmdH/Q6wggTw5qIT5TXjKzbt7GsZUBnWoO3dqw=="], "template-next-app-tailwind/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.46.0", "", { "dependencies": { "@typescript-eslint/types": "8.46.0", "@typescript-eslint/typescript-estree": "8.46.0", "@typescript-eslint/utils": "8.46.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-hy+lvYV1lZpVs2jRaEYvgCblZxUoJiPyCemwbQZ+NGulWkQRy0HRPYAoef/CNSzaLt+MLvMptZsHXHlkEilaeg=="], @@ -13598,6 +13644,8 @@ "template-recorder/lucide-react/react": ["react@19.0.0", "", {}, "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ=="], + "template-recorder/mediabunny/@types/dom-webcodecs": ["@types/dom-webcodecs@0.1.13", "", {}, "sha512-O5hkiFIcjjszPIYyUSyvScyvrBoV3NOEEZx/pMlsu44TKzWNkLVBBxnxJz42in5n3QIolYOcBYFCPZZ0h8SkwQ=="], + "template-recorder/tailwindcss/postcss": ["postcss@8.5.1", "", { "dependencies": { "nanoid": "3.3.11", "picocolors": "1.1.1", "source-map-js": "1.2.1" } }, "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ=="], "template-recorder/tailwindcss/resolve": ["resolve@1.22.8", "", { "dependencies": { "is-core-module": "2.15.1", "path-parse": "1.0.7", "supports-preserve-symlinks-flag": "1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw=="], @@ -13634,6 +13682,8 @@ "template-still/p-limit/yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], + "template-three/mediabunny/@types/dom-webcodecs": ["@types/dom-webcodecs@0.1.13", "", {}, "sha512-O5hkiFIcjjszPIYyUSyvScyvrBoV3NOEEZx/pMlsu44TKzWNkLVBBxnxJz42in5n3QIolYOcBYFCPZZ0h8SkwQ=="], + "template-tts-google/@types/express/@types/serve-static": ["@types/serve-static@1.13.10", "", { "dependencies": { "@types/mime": "1.3.2", "@types/node": "20.12.14" } }, "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ=="], "template-vercel/@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.46.0", "", { "dependencies": { "@typescript-eslint/types": "8.46.0", "@typescript-eslint/visitor-keys": "8.46.0" } }, "sha512-lWETPa9XGcBes4jqAMYD9fW0j4n6hrPtTJwWDmtqgFO/4HF4jmdH/Q6wggTw5qIT5TXjKzbt7GsZUBnWoO3dqw=="], diff --git a/package.json b/package.json index 2deb7ac3177..c4b50a24d23 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,8 @@ }, "packageManager": "bun@1.3.3", "overrides": { - "caniuse-lite": "1.0.30001766" + "caniuse-lite": "1.0.30001766", + "@rspack/core": "1.7.6" }, "workspaces": { "packages": [ @@ -100,9 +101,9 @@ "@types/node": "20.12.14", "@types/web": "0.0.166", "@types/bun": "1.3.3", - "mediabunny": "1.34.2", - "@mediabunny/mp3-encoder": "1.34.2", - "@mediabunny/ac3": "1.34.2", + "mediabunny": "1.34.3", + "@mediabunny/mp3-encoder": "1.34.3", + "@mediabunny/ac3": "1.34.3", "next": "16.1.5", "three": "0.178.0", "sharp": "0.34.5", @@ -114,7 +115,7 @@ "@vitest/browser-playwright": "4.0.9", "playwright": "1.55.1", "vitest": "4.0.9", - "@typescript/native-preview": "7.0.0-dev.20260105.1" + "@typescript/native-preview": "7.0.0-dev.20260217.1" } } } diff --git a/packages/animated-emoji/package.json b/packages/animated-emoji/package.json index 494f1c09c7b..a1a6df99f1a 100644 --- a/packages/animated-emoji/package.json +++ b/packages/animated-emoji/package.json @@ -8,7 +8,7 @@ "scripts": { "formatting": "prettier --experimental-cli src --check", "lint": "eslint src", - "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts" + "make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts" }, "exports": { "./package.json": "./package.json", @@ -42,6 +42,7 @@ "description": "Google Fonts Animated Emojis as Remotion components", "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" } } diff --git a/packages/animation-utils/package.json b/packages/animation-utils/package.json index 67b34b2c6f8..807b0eda3ff 100644 --- a/packages/animation-utils/package.json +++ b/packages/animation-utils/package.json @@ -15,7 +15,7 @@ "scripts": { "formatting": "prettier --experimental-cli src --check", "lint": "eslint src", - "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts", + "make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts", "test": "bun test src" }, "dependencies": { @@ -31,7 +31,8 @@ }, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "exports": { "./package.json": "./package.json", diff --git a/packages/babel-loader/package.json b/packages/babel-loader/package.json index c3718a23756..2c1b53673fe 100644 --- a/packages/babel-loader/package.json +++ b/packages/babel-loader/package.json @@ -9,7 +9,7 @@ "scripts": { "formatting": "prettier --experimental-cli src --check", "lint": "eslint src", - "make": "tsc -d" + "make": "tsgo -d" }, "files": [ "dist" @@ -33,7 +33,8 @@ "@remotion/bundler": "workspace:*", "remotion": "workspace:*", "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "peerDependencies": { "@remotion/bundler": "workspace:*" diff --git a/packages/bundler/package.json b/packages/bundler/package.json index 86ecd3a207c..bf147929730 100644 --- a/packages/bundler/package.json +++ b/packages/bundler/package.json @@ -14,7 +14,7 @@ "formatting": "prettier --experimental-cli src --check", "lint": "eslint src", "test": "bun test src", - "make": "tsc -d" + "make": "tsgo -d" }, "author": "Jonny Burger ", "license": "SEE LICENSE IN LICENSE.md", @@ -38,7 +38,8 @@ "react": "catalog:", "react-dom": "catalog:", "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "keywords": [ "remotion", diff --git a/packages/bundler/src/test/warrant-underscore-a-hack.test.ts b/packages/bundler/src/test/warrant-underscore-a-hack.test.ts index d2d65ad290e..b35b0bd0d4e 100644 --- a/packages/bundler/src/test/warrant-underscore-a-hack.test.ts +++ b/packages/bundler/src/test/warrant-underscore-a-hack.test.ts @@ -5,5 +5,6 @@ import {join} from 'path'; test('Warrant the hack we have in loader.ts ', () => { const path = join(process.cwd(), 'dist', 'fast-refresh', 'loader.js'); const contents = readFileSync(path, 'utf-8'); - expect(contents).toContain('var _a, _b'); + expect(contents).toContain('var _a;'); + expect(contents).toContain('var _b;'); }); diff --git a/packages/captions/package.json b/packages/captions/package.json index 2e0277b5fe9..0f4f399a82b 100644 --- a/packages/captions/package.json +++ b/packages/captions/package.json @@ -14,7 +14,7 @@ "formatting": "prettier --experimental-cli src --check", "lint": "eslint src", "test": "bun test src", - "make": "tsc -d" + "make": "tsgo -d" }, "author": "Jonny Burger ", "license": "MIT", @@ -22,7 +22,8 @@ "peerDependencies": {}, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "keywords": [ "remotion" diff --git a/packages/cli/package.json b/packages/cli/package.json index c1d78573c23..645b4a4e415 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -16,7 +16,7 @@ "formatting": "prettier --experimental-cli src --check", "lint": "eslint src", "test": "bun test src", - "make": "tsc -d" + "make": "tsgo -d" }, "bugs": { "url": "https://github.com/remotion-dev/remotion/issues" @@ -43,7 +43,7 @@ "@remotion/studio-shared": "workspace:*", "@remotion/studio-server": "workspace:*", "@remotion/studio": "workspace:*", - "dotenv": "9.0.2", + "dotenv": "17.3.1", "minimist": "1.2.6", "prompts": "2.4.2", "remotion": "workspace:*" @@ -65,7 +65,8 @@ "react-dom": "catalog:", "zod": "catalog:", "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "keywords": [ "remotion", diff --git a/packages/cli/remotion-cli.js b/packages/cli/remotion-cli.js index 418409a5dc1..30282cc387a 100755 --- a/packages/cli/remotion-cli.js +++ b/packages/cli/remotion-cli.js @@ -1,6 +1,6 @@ #!/usr/bin/env node const dotenv = require('dotenv'); -dotenv.config(); +dotenv.config({quiet: true}); const {cli} = require('./dist/index'); cli() diff --git a/packages/cli/src/extra-packages.ts b/packages/cli/src/extra-packages.ts index ec1a47652ce..6d0e839a152 100644 --- a/packages/cli/src/extra-packages.ts +++ b/packages/cli/src/extra-packages.ts @@ -1,6 +1,6 @@ export const EXTRA_PACKAGES: Record = { zod: '3.22.3', - mediabunny: '1.34.2', + mediabunny: '1.34.3', }; export const EXTRA_PACKAGES_DOCS: Record = { diff --git a/packages/cloudrun/package.json b/packages/cloudrun/package.json index f977ac0b44a..2dc4a3ba5af 100644 --- a/packages/cloudrun/package.json +++ b/packages/cloudrun/package.json @@ -8,7 +8,7 @@ "main": "dist/index.js", "sideEffects": false, "scripts": { - "make": "tsc -d && cp src/shared/sa-permissions.json dist/shared/sa-permissions.json", + "make": "tsgo -d && cp src/shared/sa-permissions.json dist/shared/sa-permissions.json", "makeruntime": "bun build.ts", "lint": "eslint src", "test": "bun test src", @@ -33,7 +33,8 @@ "@types/minimist": "1.2.2", "@remotion/eslint-config-internal": "workspace:*", "eslint": "catalog:", - "@types/node": "catalog:" + "@types/node": "catalog:", + "@typescript/native-preview": "catalog:" }, "exports": { "./package.json": "./package.json", diff --git a/packages/core/package.json b/packages/core/package.json index e5f19b25c8e..842ba1590fd 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -13,7 +13,7 @@ "prepublishOnly": "bun ensure-correct-version.ts && cp ../../README.md .", "lint": "eslint src", "test": "bun test src/test", - "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts" + "make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts" }, "bugs": { "url": "https://github.com/remotion-dev/remotion/issues" @@ -35,7 +35,8 @@ "webpack": "5.105.0", "zod": "catalog:", "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "keywords": [ "video", diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index be1e55584e3..729c580cb60 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -263,4 +263,4 @@ export type _InternalTypes = { ProResProfile: ProResProfile; }; -export type {DelayRenderScope, LoopDisplay, UseBufferState}; +export type {AnyComposition, DelayRenderScope, LoopDisplay, UseBufferState}; diff --git a/packages/core/src/test/series.test.tsx b/packages/core/src/test/series.test.tsx index d24bdc94a8a..17a99828aae 100644 --- a/packages/core/src/test/series.test.tsx +++ b/packages/core/src/test/series.test.tsx @@ -7,8 +7,12 @@ import {Internals} from '../internals.js'; import {Series} from '../series/index.js'; import {TimelineContext} from '../TimelineContext.js'; import {useCurrentFrame} from '../use-current-frame.js'; +import {ENABLE_V5_BREAKING_CHANGES} from '../v5-flag.js'; import {WrapSequenceContext} from './wrap-sequence-context.js'; +const ABS_FILL = + '
'; + const First = () => { const frame = useCurrentFrame(); return
{'first ' + frame}
; @@ -73,7 +77,9 @@ test('Basic series test', () => { , ); expect(outerHTML).toBe( - '
third 0
', + ENABLE_V5_BREAKING_CHANGES + ? `${ABS_FILL}${ABS_FILL}
third 0
` + : `${ABS_FILL}
third 0
`, ); }); @@ -103,7 +109,9 @@ test('Should support fragments', () => { ); expect(outerHtml).not.toBe( - '
second 1
', + ENABLE_V5_BREAKING_CHANGES + ? `${ABS_FILL}${ABS_FILL}
second 1
` + : `${ABS_FILL}
second 1
`, ); }); test('Should not allow foreign elements', () => { @@ -130,7 +138,9 @@ test('Should allow layout prop', () => { , ); expect(outerHTML).toBe( - '
first 0
', + ENABLE_V5_BREAKING_CHANGES + ? `${ABS_FILL}${ABS_FILL}
first 0
` + : `${ABS_FILL}
first 0
`, ); const outerHTML2 = renderForFrame( @@ -143,7 +153,11 @@ test('Should allow layout prop', () => { , ); - expect(outerHTML2).toBe('
first 0
'); + expect(outerHTML2).toBe( + ENABLE_V5_BREAKING_CHANGES + ? `${ABS_FILL}
first 0
` + : '
first 0
', + ); }); test('Should render nothing after the end', () => { const outerHTML = renderForFrame( @@ -156,7 +170,7 @@ test('Should render nothing after the end', () => { , ); - expect(outerHTML).toBe(''); + expect(outerHTML).toBe(ENABLE_V5_BREAKING_CHANGES ? `${ABS_FILL}` : ''); }); test('Should throw if invalid or no duration provided', () => { expect(() => { @@ -202,7 +216,9 @@ test('Should allow whitespace', () => { ); expect(outerHtml).toBe( - '
second 1
', + ENABLE_V5_BREAKING_CHANGES + ? `${ABS_FILL}${ABS_FILL}
second 1
` + : `${ABS_FILL}
second 1
`, ); }); test('Handle empty Series.Sequence', () => { @@ -235,7 +251,11 @@ test('Should allow negative overlap prop', () => { , ); - expect(outerHTML).toBe('
first 4
second 0
'); + expect(outerHTML).toBe( + ENABLE_V5_BREAKING_CHANGES + ? `${ABS_FILL}
first 4
second 0
` + : '
first 4
second 0
', + ); }); test('Should allow positive overlap prop', () => { @@ -252,7 +272,7 @@ test('Should allow positive overlap prop', () => { , ); - expect(outerHTML).toBe(''); + expect(outerHTML).toBe(ENABLE_V5_BREAKING_CHANGES ? `${ABS_FILL}` : ''); }); test('Should disallow NaN as offset prop', () => { @@ -317,7 +337,11 @@ test('Should cascade negative offset props', () => { , ); - expect(outerHTML).toBe('
third 0
'); + expect(outerHTML).toBe( + ENABLE_V5_BREAKING_CHANGES + ? `${ABS_FILL}
third 0
` + : '
third 0
', + ); }); test('Should cascade positive offset props', () => { @@ -337,7 +361,11 @@ test('Should cascade positive offset props', () => { , ); - expect(outerHTML).toBe('
third 0
'); + expect(outerHTML).toBe( + ENABLE_V5_BREAKING_CHANGES + ? `${ABS_FILL}
third 0
` + : '
third 0
', + ); }); test('Allow durationInFrames as Infinity for last Series.Sequence', () => { @@ -358,7 +386,9 @@ test('Allow durationInFrames as Infinity for last Series.Sequence', () => { , ); expect(outerHTML).toBe( - '
third 0
', + ENABLE_V5_BREAKING_CHANGES + ? `${ABS_FILL}${ABS_FILL}
third 0
` + : `${ABS_FILL}
third 0
`, ); }); diff --git a/packages/create-video/package.json b/packages/create-video/package.json index b847208e0ab..3ec105c90c4 100644 --- a/packages/create-video/package.json +++ b/packages/create-video/package.json @@ -13,7 +13,7 @@ "formatting": "prettier --experimental-cli src --check", "lint": "eslint src", "test": "bun test src", - "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts" + "make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts" }, "author": "Jonny Burger ", "license": "SEE LICENSE IN LICENSE.md", @@ -30,7 +30,8 @@ "@types/tar": "6.1.1", "react": "catalog:", "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "exports": { "./package.json": "./package.json", diff --git a/packages/design/package.json b/packages/design/package.json index 6f997939b34..6f9b085c23e 100644 --- a/packages/design/package.json +++ b/packages/design/package.json @@ -15,8 +15,8 @@ "scripts": { "formatting": "prettier --experimental-cli src --check", "lint": "eslint src", - "watch": "tsc -w", - "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts" + "watch": "tsgo -w", + "make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts" }, "dependencies": { "@remotion/paths": "workspace:*", @@ -40,7 +40,8 @@ "tailwindcss": "4.1.1", "@tailwindcss/cli": "4.1.1", "tailwind-merge": "^2.6.0", - "bun-plugin-tailwind": "0.1.2" + "bun-plugin-tailwind": "0.1.2", + "@typescript/native-preview": "catalog:" }, "keywords": [], "publishConfig": { diff --git a/packages/docs/docs/5-0-migration.mdx b/packages/docs/docs/5-0-migration.mdx index a7db65aa665..06fef8476a9 100644 --- a/packages/docs/docs/5-0-migration.mdx +++ b/packages/docs/docs/5-0-migration.mdx @@ -112,8 +112,9 @@ loadFont('normal', { Remotion 5.0 has an updated license. View the [license](https://github.com/remotion-dev/remotion/blob/5-0-license/LICENSE.md) here or compare the [changes](https://github.com/remotion-dev/remotion/pull/3750). -Besides wording changes, there are two effective changes in this license: +There are two effective changes in this license: -- Contractors also count towards team size. Previously, a company could only work with contractors and never have to get a company license. -- The company license is bound to our [terms and conditions](https://www.remotion.pro/terms) that will be introduced with Remotion 5.0. - Previously, our terms were generated by a Terms and conditions generator and did not make sense. We wrote the terms and conditions to properly define how we currently handle our licensing business and policies. +- **Contractors now also count towards team size.** Previously, a company could work exclusively with contractors and never have to get a company license. +- **For customers, the license is now tied to our updated [terms and conditions](https://www.remotion.pro/terms)**. + Previously, our terms were generated by a Terms and conditions generator and did not make sense. + We updated them to make sense in the context of Remotion. diff --git a/packages/docs/docs/mediabunny/version.mdx b/packages/docs/docs/mediabunny/version.mdx index 5f5ac717181..9862f36bb51 100644 --- a/packages/docs/docs/mediabunny/version.mdx +++ b/packages/docs/docs/mediabunny/version.mdx @@ -10,7 +10,7 @@ The following package of Remotion is using [Mediabunny](https://mediabunny.dev): - [`@remotion/media`](/docs/media) - [`@remotion/media-utils`](/docs/media-utils) -The current version of Remotion uses version [`1.34.2`](https://github.com/Vanilagy/mediabunny/releases/tag/v1.34.2) of Mediabunny. +The current version of Remotion uses version [`1.34.3`](https://github.com/Vanilagy/mediabunny/releases/tag/v1.34.3) of Mediabunny. If you use Mediabunny as a direct dependency in your project, you can install it with the correct version using: @@ -25,6 +25,7 @@ Note that only from 4.0.355, Mediabunny is not bundled in with Remotion but load | Remotion Version | Mediabunny Version | | ---------------- | ------------------ | +| 4.0.424 | 1.34.3 | | 4.0.423 | 1.34.2 | | 4.0.408 | 1.29.0 | | 4.0.399 | 1.27.3 | diff --git a/packages/docs/docs/studio/deploy-static.mdx b/packages/docs/docs/studio/deploy-static.mdx index 2711d3e389e..27c6ac36e80 100644 --- a/packages/docs/docs/studio/deploy-static.mdx +++ b/packages/docs/docs/studio/deploy-static.mdx @@ -11,7 +11,8 @@ import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; You can deploy the Remotion Studio as a static site, for example to Vercel or Netlify. -While the Render button will be disabled, it may be used as a [Serve URL](/docs/terminology/serve-url) to pass to rendering APIs. +Server-side rendering will not be available, but if you enable [client-side rendering](/docs/client-side-rendering), you can render videos directly in the browser. +The deployed URL may also be used as a [Serve URL](/docs/terminology/serve-url) to pass to rendering APIs. Make sure you are on at least v4.0.97 to use this feature - use `npx remotion upgrade` to upgrade. ## Export the Remotion Studio as a static site diff --git a/packages/docusaurus-plugin/package.json b/packages/docusaurus-plugin/package.json index 0721830a235..94ac49492c6 100644 --- a/packages/docusaurus-plugin/package.json +++ b/packages/docusaurus-plugin/package.json @@ -6,7 +6,7 @@ "sideEffects": false, "scripts": { "lint": "eslint src", - "make": "tsc -d" + "make": "tsgo -d" }, "author": "Jonny Burger ", "license": "UNLICENSED", @@ -25,7 +25,8 @@ }, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "private": true, "repository": { diff --git a/packages/docusaurus-plugin/src/shiki.ts b/packages/docusaurus-plugin/src/shiki.ts index 40c105d5578..cc74667ff2b 100644 --- a/packages/docusaurus-plugin/src/shiki.ts +++ b/packages/docusaurus-plugin/src/shiki.ts @@ -6,7 +6,7 @@ import {getHighlighter} from 'shiki'; import type {UserConfigSettings} from 'shiki-twoslash'; import {renderCodeToHTML} from 'shiki-twoslash'; import {visit} from 'unist-util-visit'; -import type {BuildVisitor} from 'unist-util-visit/lib'; +import type {BuildVisitor} from 'unist-util-visit'; import {cachedTwoslashCall} from './caching'; import {setupNodeForTwoslashException} from './exceptionMessageDOM'; diff --git a/packages/enable-scss/package.json b/packages/enable-scss/package.json index 38634b386f1..497a5c7d8b6 100644 --- a/packages/enable-scss/package.json +++ b/packages/enable-scss/package.json @@ -11,7 +11,7 @@ "sideEffects": false, "scripts": { "lint": "eslint src", - "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts", + "make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts", "formatting": "prettier --experimental-cli src --check" }, "author": "Jonny Burger ", @@ -31,7 +31,8 @@ "devDependencies": { "@remotion/bundler": "workspace:*", "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "keywords": [ "remotion", diff --git a/packages/eslint-config-flat/package.json b/packages/eslint-config-flat/package.json index 5ef552b0e45..ab7c896b882 100644 --- a/packages/eslint-config-flat/package.json +++ b/packages/eslint-config-flat/package.json @@ -13,7 +13,7 @@ "scripts": { "lint": "eslint src", "formatting": "prettier --experimental-cli src --check", - "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts" + "make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts" }, "bugs": { "url": "https://github.com/remotion-dev/remotion/issues" @@ -32,7 +32,8 @@ "eslint-plugin-react": "7.37.4", "eslint-plugin-react-hooks": "5.2.0", "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "keywords": [ "remotion", diff --git a/packages/eslint-config-flat/src/auto-import-rules.ts b/packages/eslint-config-flat/src/auto-import-rules.ts index d959d2da7ec..842029f4c9d 100644 --- a/packages/eslint-config-flat/src/auto-import-rules.ts +++ b/packages/eslint-config-flat/src/auto-import-rules.ts @@ -15,7 +15,6 @@ export const autoImports = { Easing: "import {Easing} from 'remotion'", getInputProps: "import {getInputProps} from 'remotion'", getStaticFiles: "import {getStaticFiles} from '@remotion/studio'", - watchStaticFiles: "import {watchStaticFiles} from '@remotion/studio'", continueRender: "import {continueRender} from 'remotion'", delayRender: "import {delayRender} from 'remotion'", AbsoluteFill: "import {AbsoluteFill} from 'remotion'", diff --git a/packages/eslint-config-flat/src/index.ts b/packages/eslint-config-flat/src/index.ts index b5225ea5f09..7267d921268 100644 --- a/packages/eslint-config-flat/src/index.ts +++ b/packages/eslint-config-flat/src/index.ts @@ -1,5 +1,6 @@ import eslint from '@eslint/js'; import remotionPlugin from '@remotion/eslint-plugin'; +import type {Linter} from 'eslint'; import reactPlugin from 'eslint-plugin-react'; import hooksPlugin from 'eslint-plugin-react-hooks'; import tseslint from 'typescript-eslint'; @@ -8,7 +9,7 @@ export const makeConfig = ({ remotionDir, }: { remotionDir: string | undefined; -}): tseslint.ConfigArray => +}): Linter.Config[] => tseslint.config( { ignores: [ @@ -63,8 +64,8 @@ export const makeConfig = ({ rules: remotionPlugin.configs.recommended.rules, ...(remotionDir ? {files: [remotionDir]} : {}), }, - ); + ) as Linter.Config[]; -export const config: tseslint.ConfigArray = makeConfig({ +export const config: Linter.Config[] = makeConfig({ remotionDir: undefined, }); diff --git a/packages/eslint-config-internal/package.json b/packages/eslint-config-internal/package.json index 76837d4ab54..f0f7d01c946 100644 --- a/packages/eslint-config-internal/package.json +++ b/packages/eslint-config-internal/package.json @@ -7,7 +7,7 @@ "license": "SEE LICENSE IN LICENSE.md", "main": "dist/index.js", "scripts": { - "make": "tsc -d" + "make": "tsgo -d" }, "exports": { ".": { @@ -20,7 +20,8 @@ "private": true, "devDependencies": { "eslint": "catalog:", - "@types/eslint__eslintrc": "2.1.2" + "@types/eslint__eslintrc": "2.1.2", + "@typescript/native-preview": "catalog:" }, "dependencies": { "@typescript-eslint/eslint-plugin": "8.12.2", diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index 906741114f3..35cd072ea56 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -12,7 +12,7 @@ "scripts": { "lint": "eslint src", "formatting": "prettier --experimental-cli src --check", - "make": "tsc -d" + "make": "tsgo -d" }, "bugs": { "url": "https://github.com/remotion-dev/remotion/issues" @@ -30,7 +30,8 @@ "eslint-plugin-react": "7.37.4", "eslint-plugin-react-hooks": "4.6.0", "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "keywords": [ "remotion", diff --git a/packages/eslint-config/src/auto-import-rules.ts b/packages/eslint-config/src/auto-import-rules.ts index d959d2da7ec..842029f4c9d 100644 --- a/packages/eslint-config/src/auto-import-rules.ts +++ b/packages/eslint-config/src/auto-import-rules.ts @@ -15,7 +15,6 @@ export const autoImports = { Easing: "import {Easing} from 'remotion'", getInputProps: "import {getInputProps} from 'remotion'", getStaticFiles: "import {getStaticFiles} from '@remotion/studio'", - watchStaticFiles: "import {watchStaticFiles} from '@remotion/studio'", continueRender: "import {continueRender} from 'remotion'", delayRender: "import {delayRender} from 'remotion'", AbsoluteFill: "import {AbsoluteFill} from 'remotion'", diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json index 3f8b61a49a5..85ef17d82df 100644 --- a/packages/eslint-plugin/package.json +++ b/packages/eslint-plugin/package.json @@ -7,7 +7,7 @@ "description": "Rules for writing Remotion code", "scripts": { "test": "node src/tests/execute.mjs", - "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts" + "make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts" }, "main": "dist/index.js", "bugs": { @@ -27,7 +27,8 @@ }, "devDependencies": { "vitest": "catalog:", - "eslint": "8.57.0" + "eslint": "8.57.0", + "@typescript/native-preview": "catalog:" }, "exports": { "./package.json": "./package.json", diff --git a/packages/example-videos/package.json b/packages/example-videos/package.json index 56a7db27abd..5209113e638 100644 --- a/packages/example-videos/package.json +++ b/packages/example-videos/package.json @@ -10,7 +10,7 @@ "scripts": { "formatting": "prettier --experimental-cli src --check", "lint": "eslint src", - "make": "tsc -d" + "make": "tsgo -d" }, "author": "Jonny Burger", "license": "MIT", @@ -20,8 +20,9 @@ "dependencies": {}, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", + "dotenv": "17.3.1", "eslint": "catalog:", - "dotenv": "9.0.2" + "@typescript/native-preview": "catalog:" }, "private": true } diff --git a/packages/example-videos/src/remote-videos.ts b/packages/example-videos/src/remote-videos.ts index 7b986ccd7af..23af7e0a38b 100644 --- a/packages/example-videos/src/remote-videos.ts +++ b/packages/example-videos/src/remote-videos.ts @@ -4,6 +4,7 @@ import fs from 'fs'; import path from 'path'; dotenv.config({ + quiet: true, path: path.join(__dirname, '..', '.env'), }); @@ -93,7 +94,6 @@ export const getPrivateExampleVideo = async ( ); let content = new Uint8Array([]); let progress = 0; - // @ts-expect-error for await (const chunk of stream) { content = new Uint8Array([...content, ...chunk]); progress += chunk.length; diff --git a/packages/example/package.json b/packages/example/package.json index 453be964268..ede99ba8bc0 100644 --- a/packages/example/package.json +++ b/packages/example/package.json @@ -78,7 +78,7 @@ "@types/three": "catalog:", "@types/web": "catalog:", "babel-loader": "^8.2.2", - "dotenv": "9.0.2", + "dotenv": "17.3.1", "hls.js": "^0.14.17", "mediabunny": "catalog:", "lottie-web": "5.13.0", diff --git a/packages/example/render-media-on-lambda.ts b/packages/example/render-media-on-lambda.ts index 7840f69dc8a..a486e90bda8 100644 --- a/packages/example/render-media-on-lambda.ts +++ b/packages/example/render-media-on-lambda.ts @@ -6,7 +6,7 @@ import { speculateFunctionName, } from '@remotion/lambda-client'; import dotenv from 'dotenv'; -dotenv.config(); +dotenv.config({quiet: true}); await deployFunction({ memorySizeInMb: 2048, diff --git a/packages/example/testlambdaintegrations.mjs b/packages/example/testlambdaintegrations.mjs index 31d0be88fd6..4cdf32f8cee 100644 --- a/packages/example/testlambdaintegrations.mjs +++ b/packages/example/testlambdaintegrations.mjs @@ -1,7 +1,7 @@ import {execSync} from 'child_process'; import dotenv from 'dotenv'; -dotenv.config(); +dotenv.config({quiet: true}); const functionName = execSync( `bunx remotion lambda functions ls -q --compatible-only`, diff --git a/packages/example/testlambdaperformance.mjs b/packages/example/testlambdaperformance.mjs index 7e46796d45e..ddda4f064c6 100644 --- a/packages/example/testlambdaperformance.mjs +++ b/packages/example/testlambdaperformance.mjs @@ -6,7 +6,7 @@ import { import assert from 'assert'; import {config} from 'dotenv'; -config(); +config({quiet: true}); const [{functionName}] = await getFunctions({ compatibleOnly: true, diff --git a/packages/fonts/package.json b/packages/fonts/package.json index 480c976b2ed..d031930fe6b 100644 --- a/packages/fonts/package.json +++ b/packages/fonts/package.json @@ -12,7 +12,7 @@ "scripts": { "formatting": "prettier --experimental-cli src --check", "lint": "eslint src", - "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts" + "make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts" }, "keywords": [ "remotion", @@ -28,7 +28,8 @@ }, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "publishConfig": { "access": "public" diff --git a/packages/gif/package.json b/packages/gif/package.json index 2ed250dd142..4d08fac5748 100644 --- a/packages/gif/package.json +++ b/packages/gif/package.json @@ -17,7 +17,7 @@ "scripts": { "formatting": "prettier --experimental-cli src --check", "lint": "eslint src", - "make": "tsc -d && node build.mjs && bun --env-file=../.env.bundle bundle.ts" + "make": "tsgo -d && node build.mjs && bun --env-file=../.env.bundle bundle.ts" }, "exports": { "./package.json": "./package.json", @@ -37,7 +37,8 @@ "react-dom": "catalog:", "webpack": "5.105.0", "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "peerDependencies": { "react": ">=16.8.0", diff --git a/packages/google-fonts/package.json b/packages/google-fonts/package.json index 8c34d61f3a5..80f6e069c96 100644 --- a/packages/google-fonts/package.json +++ b/packages/google-fonts/package.json @@ -8,7 +8,7 @@ "main": "dist/cjs/index.js", "module": "dist/esm/index.mjs", "scripts": { - "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts", + "make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts", "generate": "bun --env-file=.env scripts/update-font-db.ts", "formatting": "prettier --experimental-cli src --check" }, @@ -20,7 +20,8 @@ "@types/css-font-loading-module": "0.0.14", "@types/prettier": "^2.7.1", "postcss": "8.4.47", - "prettier": "catalog:" + "prettier": "catalog:", + "@typescript/native-preview": "catalog:" }, "types": "dist/cjs/index.d.ts", "typesVersions": { diff --git a/packages/install-whisper-cpp/package.json b/packages/install-whisper-cpp/package.json index 5383778b71e..5586cb4720a 100644 --- a/packages/install-whisper-cpp/package.json +++ b/packages/install-whisper-cpp/package.json @@ -14,7 +14,7 @@ "formatting": "prettier --experimental-cli src --check", "lint": "eslint src", "test": "bun test src", - "make": "tsc -d" + "make": "tsgo -d" }, "author": "Jonny Burger ", "license": "SEE LICENSE IN LICENSE.md", @@ -24,7 +24,8 @@ "peerDependencies": {}, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "keywords": [ "remotion", diff --git a/packages/lambda-client/package.json b/packages/lambda-client/package.json index 77a09783035..0c54b5a32b4 100644 --- a/packages/lambda-client/package.json +++ b/packages/lambda-client/package.json @@ -10,7 +10,7 @@ "formatting": "prettier --experimental-cli src --check", "test": "bun test src", "lint": "eslint src", - "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts" + "make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts" }, "author": "Jonny Burger ", "license": "UNLICENSED", @@ -32,7 +32,8 @@ "@remotion/eslint-config-internal": "workspace:*", "eslint": "catalog:", "next": "catalog:", - "@types/mime-types": "2.1.1" + "@types/mime-types": "2.1.1", + "@typescript/native-preview": "catalog:" }, "publishConfig": { "access": "public" diff --git a/packages/lambda-client/src/aws-clients.ts b/packages/lambda-client/src/aws-clients.ts index 6198d445689..a969cfe8a77 100644 --- a/packages/lambda-client/src/aws-clients.ts +++ b/packages/lambda-client/src/aws-clients.ts @@ -7,10 +7,10 @@ import {getServiceClient} from './get-service-client'; import type {AwsRegion} from './regions'; import type {RequestHandler} from './types'; -export const getCloudWatchLogsClient = ( +export function getCloudWatchLogsClient( region: AwsRegion, requestHandler: RequestHandler | null, -): CloudWatchLogsClient => { +): CloudWatchLogsClient { return getServiceClient({ region, service: 'cloudwatch', @@ -18,14 +18,14 @@ export const getCloudWatchLogsClient = ( forcePathStyle: false, requestHandler, }); -}; +} -export const getLambdaClient = ( +export function getLambdaClient( region: AwsRegion, // eslint-disable-next-line @typescript-eslint/no-unused-vars _timeoutInTest: number | undefined, requestHandler: RequestHandler | null, -): LambdaClient => { +): LambdaClient { return getServiceClient({ region, service: 'lambda', @@ -33,12 +33,12 @@ export const getLambdaClient = ( forcePathStyle: false, requestHandler, }); -}; +} -export const getIamClient = ( +export function getIamClient( region: AwsRegion, requestHandler: RequestHandler | null, -): IAMClient => { +): IAMClient { return getServiceClient({ region, service: 'iam', @@ -46,12 +46,12 @@ export const getIamClient = ( forcePathStyle: false, requestHandler, }); -}; +} -export const getServiceQuotasClient = ( +export function getServiceQuotasClient( region: AwsRegion, requestHandler: RequestHandler | null, -): ServiceQuotasClient => { +): ServiceQuotasClient { return getServiceClient({ region, service: 'servicequotas', @@ -59,12 +59,12 @@ export const getServiceQuotasClient = ( forcePathStyle: false, requestHandler, }); -}; +} -export const getStsClient = ( +export function getStsClient( region: AwsRegion, requestHandler: RequestHandler | null, -): STSClient => { +): STSClient { return getServiceClient({ region, service: 'sts', @@ -72,4 +72,4 @@ export const getStsClient = ( forcePathStyle: false, requestHandler, }); -}; +} diff --git a/packages/lambda-client/src/express-webhook.ts b/packages/lambda-client/src/express-webhook.ts index 3b15b2badf3..d8edf8c7baa 100644 --- a/packages/lambda-client/src/express-webhook.ts +++ b/packages/lambda-client/src/express-webhook.ts @@ -3,10 +3,12 @@ import type {NextWebhookArgs} from './app-router-webhook'; import {addHeaders} from './pages-router-webhook'; import {validateWebhookSignature} from './validate-webhook-signature'; -export const expressWebhook = (options: NextWebhookArgs) => { +export function expressWebhook( + options: NextWebhookArgs, +): (req: Request, res: Response) => Promise { const {testing, extraHeaders, secret, onSuccess, onTimeout, onError} = options; - return async (req: Request, res: Response) => { + return async (req: Request, res: Response): Promise => { // add headers to enable testing if (testing) { const testingheaders = { @@ -54,4 +56,4 @@ export const expressWebhook = (options: NextWebhookArgs) => { }); } }; -}; +} diff --git a/packages/lambda-client/src/get-credentials.ts b/packages/lambda-client/src/get-credentials.ts index ff9a1270e28..f8c225f669a 100644 --- a/packages/lambda-client/src/get-credentials.ts +++ b/packages/lambda-client/src/get-credentials.ts @@ -9,10 +9,10 @@ type CredentialPair = { }; type AwsCredentialIdentityProvider = ReturnType; -export const getCredentials = (): +export function getCredentials(): | CredentialPair | AwsCredentialIdentityProvider - | undefined => { + | undefined { if (isInsideLambda()) { return undefined; } @@ -78,4 +78,4 @@ export const getCredentials = (): } return undefined; -}; +} diff --git a/packages/lambda-client/src/get-function-version.ts b/packages/lambda-client/src/get-function-version.ts index e5dc60543f1..c6b06e6ffeb 100644 --- a/packages/lambda-client/src/get-function-version.ts +++ b/packages/lambda-client/src/get-function-version.ts @@ -7,7 +7,7 @@ import {awsImplementation} from './aws-provider'; import type {AwsRegion} from './regions'; import type {RequestHandler} from './types'; -export const getFunctionVersion = async ({ +export async function getFunctionVersion({ functionName, region, logLevel, @@ -17,7 +17,7 @@ export const getFunctionVersion = async ({ region: AwsRegion; logLevel: LogLevel; requestHandler: RequestHandler | null | undefined; -}): Promise => { +}): Promise { try { // For now, we'll pass requestHandler to the awsImplementation if needed // This might require deeper changes in the serverless-client framework @@ -46,4 +46,4 @@ export const getFunctionVersion = async ({ throw err; } -}; +} diff --git a/packages/lambda-client/src/get-s3-client.ts b/packages/lambda-client/src/get-s3-client.ts index c9278b26913..2e50b7fa919 100644 --- a/packages/lambda-client/src/get-s3-client.ts +++ b/packages/lambda-client/src/get-s3-client.ts @@ -5,7 +5,7 @@ import {getServiceClient} from './get-service-client'; import type {AwsRegion} from './regions'; import type {RequestHandler} from './types'; -export const getS3Client = ({ +export function getS3Client({ region, customCredentials, forcePathStyle, @@ -15,7 +15,7 @@ export const getS3Client = ({ customCredentials: CustomCredentials | null; forcePathStyle: boolean; requestHandler: RequestHandler | null; -}): S3Client => { +}): S3Client { return getServiceClient({ region: customCredentials?.region ?? region, service: 's3', @@ -23,4 +23,4 @@ export const getS3Client = ({ forcePathStyle, requestHandler, }); -}; +} diff --git a/packages/lambda-client/src/get-service-client.ts b/packages/lambda-client/src/get-service-client.ts index 7b5372d025e..6dd26ac5530 100644 --- a/packages/lambda-client/src/get-service-client.ts +++ b/packages/lambda-client/src/get-service-client.ts @@ -88,7 +88,7 @@ const _clients: Partial< > > = {}; -export const getServiceClient = ({ +export function getServiceClient({ region, service, customCredentials, @@ -100,7 +100,7 @@ export const getServiceClient = ({ customCredentials: CustomCredentials | null; forcePathStyle: boolean; requestHandler: RequestHandler | null; -}): ServiceMapping[T] => { +}): ServiceMapping[T] { const Client = (() => { if (service === 'cloudwatch') { return CloudWatchLogsClient; @@ -192,4 +192,4 @@ export const getServiceClient = ({ } return _clients[key] as ServiceMapping[T]; -}; +} diff --git a/packages/lambda-client/src/index.ts b/packages/lambda-client/src/index.ts index 095769cbd66..f88e4b471ce 100644 --- a/packages/lambda-client/src/index.ts +++ b/packages/lambda-client/src/index.ts @@ -108,7 +108,48 @@ export { export type {RequestHandler} from './types'; export {validateWebhookSignature} from './validate-webhook-signature'; -export const LambdaClientInternals = { +export const LambdaClientInternals: { + generateRandomHashWithLifeCycleRule: typeof generateRandomHashWithLifeCycleRule; + getLambdaClient: typeof getLambdaClient; + getS3Client: typeof getS3Client; + getS3RenderUrl: typeof getS3RenderUrl; + getIamClient: typeof getIamClient; + getStsClient: typeof getStsClient; + getCloudWatchLogsClient: typeof getCloudWatchLogsClient; + getServiceQuotasClient: typeof getServiceQuotasClient; + parseJsonOrThrowSource: typeof parseJsonOrThrowSource; + getCloudwatchMethodUrl: typeof getCloudwatchMethodUrl; + getCloudwatchRendererUrl: typeof getCloudwatchRendererUrl; + MAX_EPHEMERAL_STORAGE_IN_MB: typeof MAX_EPHEMERAL_STORAGE_IN_MB; + parseFunctionName: typeof parseFunctionName; + isFlakyError: typeof isFlakyError; + convertToServeUrlImplementation: typeof convertToServeUrlImplementation; + randomHashImplementation: typeof randomHashImplementation; + parseBucketName: typeof parseBucketName; + makeLambdaRenderMediaPayload: typeof makeLambdaRenderMediaPayload; + renderMediaOnLambdaOptionalToRequired: typeof renderMediaOnLambdaOptionalToRequired; + internalDeleteRender: typeof internalDeleteRender; + internalGetSites: typeof internalGetSites; + getLifeCycleRules: typeof getLifeCycleRules; + awsImplementation: typeof awsImplementation; + runtimePreferenceOptions: typeof runtimePreferenceOptions; + validateAwsRegion: typeof validateAwsRegion; + validateDiskSizeInMb: typeof validateDiskSizeInMb; + validateMemorySize: typeof validateMemorySize; + DEFAULT_CLOUDWATCH_RETENTION_PERIOD: typeof DEFAULT_CLOUDWATCH_RETENTION_PERIOD; + DEFAULT_EPHEMERAL_STORAGE_IN_MB: typeof DEFAULT_EPHEMERAL_STORAGE_IN_MB; + LAMBDA_VERSION_STRING: typeof LAMBDA_VERSION_STRING; + pLimit: typeof pLimit; + makeS3ServeUrl: typeof makeS3ServeUrl; + validateServeUrl: typeof validateServeUrl; + getEnvVariable: typeof getEnvVariable; + internalRenderMediaOnLambdaRaw: typeof internalRenderMediaOnLambdaRaw; + internalRenderStillOnLambda: typeof internalRenderStillOnLambda; + cleanItems: typeof cleanItems; + makeLambdaRenderStillPayload: typeof makeLambdaRenderStillPayload; + getRenderProgressPayload: typeof getRenderProgressPayload; + innerSpeculateFunctionName: typeof innerSpeculateFunctionName; +} = { generateRandomHashWithLifeCycleRule, getLambdaClient, getS3Client, diff --git a/packages/lambda-client/src/lifecycle-rules.ts b/packages/lambda-client/src/lifecycle-rules.ts index f9690c67c33..4cd13e20d29 100644 --- a/packages/lambda-client/src/lifecycle-rules.ts +++ b/packages/lambda-client/src/lifecycle-rules.ts @@ -80,7 +80,7 @@ const deleteLCRules = async ({ } }; -export const applyLifeCyleOperation = async ({ +export async function applyLifeCyleOperation({ enableFolderExpiry, bucketName, region, @@ -94,7 +94,7 @@ export const applyLifeCyleOperation = async ({ customCredentials: CustomCredentials | null; forcePathStyle: boolean; requestHandler: RequestHandler | null; -}) => { +}): Promise { if (enableFolderExpiry === null) { return; } @@ -116,4 +116,4 @@ export const applyLifeCyleOperation = async ({ requestHandler, }); } -}; +} diff --git a/packages/lambda-client/src/read-file.ts b/packages/lambda-client/src/read-file.ts index 6668e80f119..5b18da7068c 100644 --- a/packages/lambda-client/src/read-file.ts +++ b/packages/lambda-client/src/read-file.ts @@ -4,7 +4,7 @@ import {getS3Client} from './get-s3-client'; import type {AwsRegion} from './regions'; import type {RequestHandler} from './types'; -export const lambdaReadFileImplementation = async ({ +export async function lambdaReadFileImplementation({ bucketName, key, region, @@ -18,7 +18,7 @@ export const lambdaReadFileImplementation = async ({ expectedBucketOwner: string | null; forcePathStyle: boolean; requestHandler: RequestHandler | null; -}): Promise => { +}): Promise { const {Body} = await getS3Client({ region, customCredentials: null, @@ -32,4 +32,4 @@ export const lambdaReadFileImplementation = async ({ }), ); return Body as Readable; -}; +} diff --git a/packages/lambda-client/src/render-still-on-lambda.ts b/packages/lambda-client/src/render-still-on-lambda.ts index 91daa9877f3..49421559bd7 100644 --- a/packages/lambda-client/src/render-still-on-lambda.ts +++ b/packages/lambda-client/src/render-still-on-lambda.ts @@ -162,7 +162,7 @@ export const internalRenderStillOnLambda = wrapWithErrorHandling( * @description Renders a still image inside a lambda function and writes it to the specified output location. * @see [Documentation](https://remotion.dev/docs/lambda/renderstillonlambda) */ -export const renderStillOnLambda = ( +export function renderStillOnLambda( input: RenderStillOnLambdaInput & { /** * @deprecated Renamed to `jpegQuality` @@ -177,7 +177,7 @@ export const renderStillOnLambda = ( */ apiKey?: string | null; }, -) => { +): Promise { return internalRenderStillOnLambda({ chromiumOptions: input.chromiumOptions ?? {}, composition: input.composition, @@ -212,4 +212,4 @@ export const renderStillOnLambda = ( mediaCacheSizeInBytes: input.mediaCacheSizeInBytes ?? null, isProduction: input.isProduction ?? null, }); -}; +} diff --git a/packages/lambda-go/build.mjs b/packages/lambda-go/build.mjs index b024583bcc1..3f1c02d6930 100644 --- a/packages/lambda-go/build.mjs +++ b/packages/lambda-go/build.mjs @@ -16,5 +16,5 @@ if (!hasGo()) { console.log("Environment has no Go. Skipping..."); process.exit(0); } -execSync("go mod tidy", { stdio: "inherit" }); +execSync("go build ./...", { stdio: "inherit" }); console.log("Linted lambda-go!"); diff --git a/packages/lambda-python/package.json b/packages/lambda-python/package.json index 5e34b5d6e91..8620a9dd200 100644 --- a/packages/lambda-python/package.json +++ b/packages/lambda-python/package.json @@ -13,6 +13,6 @@ "remotion": "workspace:*" }, "dependencies": { - "dotenv": "9.0.2" + "dotenv": "17.3.1" } } diff --git a/packages/lambda-python/publish.mjs b/packages/lambda-python/publish.mjs index 50d58f9fd54..3e60b6f7653 100644 --- a/packages/lambda-python/publish.mjs +++ b/packages/lambda-python/publish.mjs @@ -1,7 +1,7 @@ import dotenv from 'dotenv'; import {execSync} from 'node:child_process'; -dotenv.config(); +dotenv.config({quiet: true}); const isTest = false; const pypiRepo = isTest ? 'testpypi' : 'pypi'; diff --git a/packages/lambda/package.json b/packages/lambda/package.json index c00160be629..5ad2c618cb0 100644 --- a/packages/lambda/package.json +++ b/packages/lambda/package.json @@ -12,7 +12,7 @@ "lint": "eslint src", "testlambda": "exit 0", "test": "bun test src/test/unit", - "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts", + "make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts", "makeruntime": "bun build.ts", "prepublishOnly": "bun build.ts && bun ensure-version-match.js" }, @@ -51,7 +51,8 @@ "eslint": "catalog:", "next": "catalog:", "pureimage": "0.4.13", - "@types/node": "catalog:" + "@types/node": "catalog:", + "@typescript/native-preview": "catalog:" }, "peerDependencies": { "@remotion/bundler": "workspace:*" diff --git a/packages/lambda/src/api/create-function.ts b/packages/lambda/src/api/create-function.ts index 90c760655cd..e0be0894bd9 100644 --- a/packages/lambda/src/api/create-function.ts +++ b/packages/lambda/src/api/create-function.ts @@ -25,6 +25,26 @@ import {getLayers} from '../shared/get-layers'; import {lambdaInsightsExtensions} from '../shared/lambda-insights-extensions'; import {ROLE_NAME} from './iam-validation/suggested-policy'; +type CreateFunctionInput = { + createCloudWatchLogGroup: boolean; + region: AwsRegion; + zipFile: string; + functionName: string; + accountId: string; + memorySizeInMb: number; + timeoutInSeconds: number; + alreadyCreated: boolean; + retentionInDays: number; + ephemerealStorageInMb: number; + customRoleArn: string; + enableLambdaInsights: boolean; + logLevel: LogLevel; + vpcSubnetIds: string; + vpcSecurityGroupIds: string; + runtimePreference: RuntimePreference; + requestHandler: RequestHandler | null; +}; + export const createFunction = async ({ createCloudWatchLogGroup, region, @@ -43,25 +63,7 @@ export const createFunction = async ({ vpcSecurityGroupIds, runtimePreference, requestHandler, -}: { - createCloudWatchLogGroup: boolean; - region: AwsRegion; - zipFile: string; - functionName: string; - accountId: string; - memorySizeInMb: number; - timeoutInSeconds: number; - alreadyCreated: boolean; - retentionInDays: number; - ephemerealStorageInMb: number; - customRoleArn: string; - enableLambdaInsights: boolean; - logLevel: LogLevel; - vpcSubnetIds: string; - vpcSecurityGroupIds: string; - runtimePreference: RuntimePreference; - requestHandler: RequestHandler | null; -}): Promise<{FunctionName: string}> => { +}: CreateFunctionInput): Promise<{FunctionName: string}> => { if (createCloudWatchLogGroup) { RenderInternals.Log.verbose( {indent: false, logLevel}, diff --git a/packages/lambda/src/api/deploy-site.ts b/packages/lambda/src/api/deploy-site.ts index a157fafb808..10822236d14 100644 --- a/packages/lambda/src/api/deploy-site.ts +++ b/packages/lambda/src/api/deploy-site.ts @@ -214,7 +214,15 @@ const mandatoryDeploySite = async ({ }; }; -export const internalDeploySite = wrapWithErrorHandling(mandatoryDeploySite); +export type InternalDeploySiteInput = MandatoryParameters & + OptionalParameters & { + providerSpecifics: ProviderSpecifics; + fullClientSpecifics: FullClientSpecifics; + }; + +export const internalDeploySite: ( + input: InternalDeploySiteInput, +) => DeploySiteOutput = wrapWithErrorHandling(mandatoryDeploySite); /* * @description Deploys a Remotion project to a GCP storage bucket to prepare it for rendering on Cloud Run. diff --git a/packages/lambda/src/api/iam-validation/simulate-rule.ts b/packages/lambda/src/api/iam-validation/simulate-rule.ts index 3da1998cfd5..a3478dbe2f2 100644 --- a/packages/lambda/src/api/iam-validation/simulate-rule.ts +++ b/packages/lambda/src/api/iam-validation/simulate-rule.ts @@ -9,14 +9,18 @@ export type SimulationResult = { name: string; }; -export const simulateRule = async (options: { +type SimulateRuleOptions = { region: AwsRegion; actionNames: string[]; arn: string; resource: string[]; retries: number; requestHandler: RequestHandler | null; -}): Promise => { +}; + +export const simulateRule = async ( + options: SimulateRuleOptions, +): Promise => { try { const res = await LambdaClientInternals.getIamClient( options.region, diff --git a/packages/lambda/src/api/upload-dir.ts b/packages/lambda/src/api/upload-dir.ts index 2a47bc945a9..cb3c9d63f43 100644 --- a/packages/lambda/src/api/upload-dir.ts +++ b/packages/lambda/src/api/upload-dir.ts @@ -59,6 +59,18 @@ async function getFiles( const limit = LambdaClientInternals.pLimit(5); +type UploadDirInput = { + bucket: string; + region: AwsRegion; + localDir: string; + keyPrefix: string; + onProgress: (progress: UploadDirProgress) => void; + privacy: Privacy; + toUpload: string[]; + forcePathStyle: boolean; + requestHandler: RequestHandler | null; +}; + export const uploadDir = async ({ bucket, region, @@ -69,17 +81,7 @@ export const uploadDir = async ({ toUpload, forcePathStyle, requestHandler, -}: { - bucket: string; - region: AwsRegion; - localDir: string; - keyPrefix: string; - onProgress: (progress: UploadDirProgress) => void; - privacy: Privacy; - toUpload: string[]; - forcePathStyle: boolean; - requestHandler: RequestHandler | null; -}) => { +}: UploadDirInput): Promise => { const files = await getFiles(localDir, localDir, toUpload); const progresses: {[key: string]: number} = {}; for (const file of files) { diff --git a/packages/lambda/src/cli/commands/quotas/increase.ts b/packages/lambda/src/cli/commands/quotas/increase.ts index fda5227f031..bea70f251bc 100644 --- a/packages/lambda/src/cli/commands/quotas/increase.ts +++ b/packages/lambda/src/cli/commands/quotas/increase.ts @@ -34,10 +34,10 @@ const makeQuotaUrl = ({ return `https://${region}.console.aws.amazon.com/servicequotas/home/services/lambda/quotas/${quotaId}`; }; -export const quotasIncreaseCommand = async ( +export async function quotasIncreaseCommand( logLevel: LogLevel, requestHandler: RequestHandler | null, -) => { +): Promise { const region = getAwsRegion(); const [concurrencyLimit, defaultConcurrencyLimit, changes] = @@ -152,4 +152,4 @@ export const quotasIncreaseCommand = async ( {indent: false, logLevel}, `Requested increase successfully. Run "${BINARY_NAME} ${QUOTAS_COMMAND}" to check whether your request was approved.`, ); -}; +} diff --git a/packages/lambda/src/functions/helpers/read-with-progress.ts b/packages/lambda/src/functions/helpers/read-with-progress.ts index 7be5e7f040f..f7867468778 100644 --- a/packages/lambda/src/functions/helpers/read-with-progress.ts +++ b/packages/lambda/src/functions/helpers/read-with-progress.ts @@ -16,6 +16,20 @@ export type LambdaReadFileProgress = (progress: { percent: number; }) => unknown; +type LambdaDownloadFileWithProgressInput = { + bucketName: string; + key: string; + region: AwsRegion; + expectedBucketOwner: string; + outputPath: string; + onProgress: LambdaReadFileProgress; + customCredentials: CustomCredentials | null; + logLevel: LogLevel; + forcePathStyle: boolean; + requestHandler: RequestHandler; + abortSignal: AbortSignal; +}; + export const lambdaDownloadFileWithProgress = async ({ bucketName, key, @@ -28,19 +42,10 @@ export const lambdaDownloadFileWithProgress = async ({ forcePathStyle, requestHandler, abortSignal, -}: { - bucketName: string; - key: string; - region: AwsRegion; - expectedBucketOwner: string; - outputPath: string; - onProgress: LambdaReadFileProgress; - customCredentials: CustomCredentials | null; - logLevel: LogLevel; - forcePathStyle: boolean; - requestHandler: RequestHandler; - abortSignal: AbortSignal; -}): Promise<{sizeInBytes: number; to: string}> => { +}: LambdaDownloadFileWithProgressInput): Promise<{ + sizeInBytes: number; + to: string; +}> => { const client = LambdaClientInternals.getS3Client({ region, customCredentials, diff --git a/packages/lambda/src/internals.ts b/packages/lambda/src/internals.ts index e1d9b58ce68..df569da3419 100644 --- a/packages/lambda/src/internals.ts +++ b/packages/lambda/src/internals.ts @@ -1,8 +1,36 @@ +import type { + AwsProvider, + AwsRegion, + RuntimePreference, +} from '@remotion/lambda-client'; +import type {LogLevel} from '@remotion/renderer'; +import type { + FullClientSpecifics, + ProviderSpecifics, +} from '@remotion/serverless'; +import type { + DeploySiteOutput, + InternalDeploySiteInput, +} from './api/deploy-site'; import {internalDeploySite} from './api/deploy-site'; import {executeCommand} from './cli/index'; import {getLayers} from './shared/get-layers'; +import type {AwsLayer} from './shared/hosted-layers'; -export const LambdaInternals = { +export const LambdaInternals: { + executeCommand: ( + args: string[], + remotionRoot: string, + logLevel: LogLevel, + providerSpecifics: ProviderSpecifics | null, + fullClientSpecifics: FullClientSpecifics | null, + ) => Promise; + internalDeploySite: (input: InternalDeploySiteInput) => DeploySiteOutput; + getLayers: (options: { + option: RuntimePreference; + region: AwsRegion; + }) => AwsLayer[]; +} = { executeCommand, internalDeploySite, getLayers, diff --git a/packages/layout-utils/package.json b/packages/layout-utils/package.json index 93baacf7638..677939a2d15 100644 --- a/packages/layout-utils/package.json +++ b/packages/layout-utils/package.json @@ -12,7 +12,7 @@ "scripts": { "formatting": "prettier --experimental-cli src --check", "lint": "eslint src", - "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts" + "make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts" }, "exports": { "./package.json": "./package.json", @@ -25,7 +25,8 @@ }, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "author": "Yehor Misiats (https://github.com/satelllte)", "maintainers": [ diff --git a/packages/licensing/package.json b/packages/licensing/package.json index 8019c2e91c1..72ca6b901a0 100644 --- a/packages/licensing/package.json +++ b/packages/licensing/package.json @@ -10,7 +10,7 @@ "scripts": { "lint": "eslint src", "formatting": "prettier --experimental-cli src --check", - "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts", + "make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts", "test": "bun test src/test/prod-domain.test.ts src/test/register-usage-event-retry.test.ts" }, "author": "Jonny Burger ", @@ -27,7 +27,8 @@ "@remotion/eslint-config-internal": "workspace:*", "eslint": "catalog:", "msw": "^2.7.1", - "remotion": "workspace:*" + "remotion": "workspace:*", + "@typescript/native-preview": "catalog:" }, "homepage": "https://www.remotion.dev/docs/licensing", "exports": { diff --git a/packages/lottie/package.json b/packages/lottie/package.json index 77a386b299e..819abbd553e 100644 --- a/packages/lottie/package.json +++ b/packages/lottie/package.json @@ -13,7 +13,7 @@ "formatting": "prettier --experimental-cli src --check", "lint": "eslint src", "test": "bun test src", - "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts" + "make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts" }, "bugs": { "url": "https://github.com/remotion-dev/remotion/issues" @@ -46,7 +46,8 @@ "react-dom": "catalog:", "lottie-web": "5.13.0", "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "keywords": [ "remotion", diff --git a/packages/mcp/package.json b/packages/mcp/package.json index ef67b3c3ebd..74559f16627 100644 --- a/packages/mcp/package.json +++ b/packages/mcp/package.json @@ -16,7 +16,7 @@ }, "scripts": { "lint": "eslint src", - "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts" + "make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts" }, "files": [ "dist" @@ -31,7 +31,8 @@ "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", "eslint": "catalog:", - "@types/command-line-args": "^5.2.3" + "@types/command-line-args": "^5.2.3", + "@typescript/native-preview": "catalog:" }, "keywords": [ "remotion", diff --git a/packages/media-parser/package.json b/packages/media-parser/package.json index 4bd65d054e9..4334909cbfd 100644 --- a/packages/media-parser/package.json +++ b/packages/media-parser/package.json @@ -10,7 +10,7 @@ "formatting": "prettier --experimental-cli src --check", "lint": "eslint src", "testwebcodecs": "bun test src/test --timeout=30000", - "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts", + "make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts", "prepublishOnly": "bun ensure-correct-version.ts" }, "devDependencies": { @@ -19,7 +19,8 @@ "@remotion/eslint-config-internal": "workspace:*", "eslint": "catalog:", "mediabunny": "catalog:", - "@types/bun": "catalog:" + "@types/bun": "catalog:", + "@typescript/native-preview": "catalog:" }, "publishConfig": { "access": "public" diff --git a/packages/media-parser/src/index.ts b/packages/media-parser/src/index.ts index 5b1b72cf173..a7abb120355 100644 --- a/packages/media-parser/src/index.ts +++ b/packages/media-parser/src/index.ts @@ -62,11 +62,16 @@ export type {MediaParserEmbeddedImage} from './state/images'; export {downloadAndParseMedia} from './download-and-parse-media'; export type {Options, ParseMediaFields} from './fields'; export type { + M3uPlaylistContext, MediaParserContainer, + ParseMediaCallbacksMandatory, + ParseMediaMandatoryOptions, ParseMediaOnProgress, + ParseMediaOnWorkerOptions, ParseMediaOptions, ParseMediaProgress, ParseMediaResult, + SerializeableOptionalParseMediaParams, } from './options'; export type { MediaParserAudioSample, @@ -89,6 +94,20 @@ export type {MediaParserReaderInterface} from './readers/reader'; import type {CreateContent, Writer, WriterInterface} from './writers/writer'; +export type {AllOptions} from './fields'; +export type {SeekingHints} from './seeking-hints'; +export type { + CreateContent, + Ebml, + FloatWithSize, + MatroskaElement, + PossibleEbml, + SamplePosition, + UintWithSize, + Writer, + WriterInterface, +}; + /** * @deprecated Dont use these yet. */ diff --git a/packages/media-utils/package.json b/packages/media-utils/package.json index cb64082016c..3f177376169 100644 --- a/packages/media-utils/package.json +++ b/packages/media-utils/package.json @@ -10,7 +10,7 @@ "scripts": { "formatting": "prettier --experimental-cli src --check", "lint": "eslint src", - "make": "tsc -d" + "make": "tsgo -d" }, "author": "Jonny Burger ", "license": "MIT", @@ -29,7 +29,8 @@ }, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "keywords": [ "remotion", diff --git a/packages/motion-blur/package.json b/packages/motion-blur/package.json index 421e68057fb..4db6d6f91ed 100644 --- a/packages/motion-blur/package.json +++ b/packages/motion-blur/package.json @@ -12,7 +12,7 @@ "scripts": { "formatting": "prettier --experimental-cli src --check", "lint": "eslint src", - "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts" + "make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts" }, "author": "Matt McGillivray, Ilija Boshkov , Jonny Burger ", "contributors": [], @@ -41,7 +41,8 @@ "react-dom": "catalog:", "remotion": "workspace:*", "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "keywords": [ "remotion", diff --git a/packages/noise/package.json b/packages/noise/package.json index 844c428dba4..7af2cc2e66b 100644 --- a/packages/noise/package.json +++ b/packages/noise/package.json @@ -12,7 +12,7 @@ "scripts": { "formatting": "prettier --experimental-cli src --check", "lint": "eslint src", - "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts", + "make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts", "test": "bun test src" }, "exports": { @@ -40,7 +40,8 @@ }, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "keywords": [ "remotion", diff --git a/packages/openai-whisper/package.json b/packages/openai-whisper/package.json index 4072ed70688..0a985c28737 100644 --- a/packages/openai-whisper/package.json +++ b/packages/openai-whisper/package.json @@ -14,7 +14,7 @@ "formatting": "prettier --experimental-cli src --check", "lint": "eslint src", "test": "bun test src", - "make": "tsc -d" + "make": "tsgo -d" }, "author": "Jonny Burger ", "license": "MIT", @@ -25,7 +25,8 @@ "devDependencies": { "openai": "catalog:", "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "keywords": [ "remotion" diff --git a/packages/paths/package.json b/packages/paths/package.json index 0ed6f59b5a0..283ff9beec1 100644 --- a/packages/paths/package.json +++ b/packages/paths/package.json @@ -13,7 +13,7 @@ "formatting": "prettier --experimental-cli src --check", "lint": "eslint src", "test": "bun test src", - "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts" + "make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts" }, "author": "Jonny Burger ", "license": "MIT", @@ -27,7 +27,8 @@ ], "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "exports": { "./package.json": "./package.json", diff --git a/packages/player/package.json b/packages/player/package.json index 16ba9446d18..2d53992bffe 100644 --- a/packages/player/package.json +++ b/packages/player/package.json @@ -12,7 +12,7 @@ "scripts": { "formatting": "prettier --experimental-cli src --check", "lint": "eslint src", - "make": "tsc -d && bun ensure-correct-version.ts && bun --env-file=../.env.bundle bundle.ts", + "make": "tsgo -d && bun ensure-correct-version.ts && bun --env-file=../.env.bundle bundle.ts", "test": "bun test src", "prerelease": "cp ../../README.md ." }, @@ -50,7 +50,8 @@ "webpack": "5.105.0", "zod": "catalog:", "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "keywords": [ "remotion", diff --git a/packages/preload/package.json b/packages/preload/package.json index b8f6c190d97..f96ed67d78a 100644 --- a/packages/preload/package.json +++ b/packages/preload/package.json @@ -11,7 +11,7 @@ "scripts": { "formatting": "prettier --experimental-cli src --check", "lint": "eslint src", - "make": "tsc -d" + "make": "tsgo -d" }, "author": "Jonny Burger", "contributors": [], @@ -30,7 +30,8 @@ }, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "homepage": "https://www.remotion.dev/docs/preload" } diff --git a/packages/react18-tests/package.json b/packages/react18-tests/package.json index b0a7ea5cd25..c7bbea5c1bc 100644 --- a/packages/react18-tests/package.json +++ b/packages/react18-tests/package.json @@ -9,7 +9,7 @@ "scripts": { "formatting": "prettier --experimental-cli src --check", "lint": "eslint src", - "make": "tsc -d", + "make": "tsgo -d", "testwebrenderer": "vitest src/test --browser --run", "studio": "cd ../example && bunx remotion studio ../react18-tests/src/test/studio.ts" }, @@ -31,7 +31,8 @@ "vitest": "catalog:", "vitest-browser-react": "^2.0.2", "@types/react": "18.3.1", - "@types/react-dom": "18.3.1" + "@types/react-dom": "18.3.1", + "@typescript/native-preview": "catalog:" }, "peerDependencies": { "react": ">=18.0.0", diff --git a/packages/rive/package.json b/packages/rive/package.json index 09322d2d2a2..b75e8222115 100644 --- a/packages/rive/package.json +++ b/packages/rive/package.json @@ -11,7 +11,7 @@ "scripts": { "formatting": "prettier --experimental-cli src --check", "lint": "eslint src", - "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts" + "make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts" }, "bugs": { "url": "https://github.com/remotion-dev/remotion/issues" @@ -31,7 +31,8 @@ "react": "catalog:", "react-dom": "catalog:", "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "publishConfig": { "access": "public" diff --git a/packages/rounded-text-box/package.json b/packages/rounded-text-box/package.json index 391efcb4623..f964aa17710 100644 --- a/packages/rounded-text-box/package.json +++ b/packages/rounded-text-box/package.json @@ -12,7 +12,7 @@ "scripts": { "formatting": "prettier --experimental-cli src --check", "lint": "eslint src", - "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts" + "make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts" }, "exports": { "./package.json": "./package.json", @@ -29,7 +29,8 @@ }, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "author": "Jonny Burger ", "maintainers": [ diff --git a/packages/serverless-client/package.json b/packages/serverless-client/package.json index 2862b43ea14..2f0f6c6a986 100644 --- a/packages/serverless-client/package.json +++ b/packages/serverless-client/package.json @@ -10,7 +10,7 @@ "lint": "eslint src", "formatting": "prettier --experimental-cli src --check", "test": "bun test src", - "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts" + "make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts" }, "author": "Jonny Burger ", "contributors": [], @@ -27,7 +27,8 @@ "@remotion/streaming": "workspace:*", "@remotion/renderer": "workspace:*", "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "exports": { "./package.json": "./package.json", diff --git a/packages/serverless-client/src/index.ts b/packages/serverless-client/src/index.ts index 3a384fa65fb..53dec435dd1 100644 --- a/packages/serverless-client/src/index.ts +++ b/packages/serverless-client/src/index.ts @@ -115,11 +115,16 @@ export * from './webhook-types'; export {EnhancedErrorInfo, FunctionErrorInfo} from './write-error-to-storage'; export {interpolate, random}; -export const { - ENABLE_V5_BREAKING_CHANGES, - serializeJSONWithSpecialTypes, - validateFps, - validateDimension, - validateDurationInFrames, - validateCodec, -} = NoReactInternals; +/* eslint-disable prefer-destructuring */ +export const ENABLE_V5_BREAKING_CHANGES = + NoReactInternals.ENABLE_V5_BREAKING_CHANGES; +export const serializeJSONWithSpecialTypes = + NoReactInternals.serializeJSONWithSpecialTypes; +export const validateFps: typeof NoReactInternals.validateFps = + NoReactInternals.validateFps; +export const validateDimension: typeof NoReactInternals.validateDimension = + NoReactInternals.validateDimension; +export const validateDurationInFrames: typeof NoReactInternals.validateDurationInFrames = + NoReactInternals.validateDurationInFrames; +export const validateCodec: typeof NoReactInternals.validateCodec = + NoReactInternals.validateCodec; diff --git a/packages/serverless/package.json b/packages/serverless/package.json index 49e0b3dac51..d3285f069b9 100644 --- a/packages/serverless/package.json +++ b/packages/serverless/package.json @@ -11,7 +11,7 @@ "lint": "eslint src", "formatting": "prettier --experimental-cli src --check", "test": "bun test src", - "make": "tsc -d" + "make": "tsgo -d" }, "author": "Jonny Burger ", "contributors": [], @@ -30,7 +30,8 @@ }, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "exports": { ".": "./dist/index.js", diff --git a/packages/shapes/package.json b/packages/shapes/package.json index fcc99ac5fe0..f07583ae136 100644 --- a/packages/shapes/package.json +++ b/packages/shapes/package.json @@ -11,7 +11,7 @@ "formatting": "prettier --experimental-cli src --check", "lint": "eslint src", "test": "bun test src", - "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts" + "make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts" }, "types": "dist/index.d.ts", "module": "dist/esm/index.mjs", @@ -35,7 +35,8 @@ "react-dom": "catalog:", "@happy-dom/global-registrator": "14.5.1", "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "keywords": [ "svg", diff --git a/packages/skia/package.json b/packages/skia/package.json index 8a851e38d88..3d983d6f426 100644 --- a/packages/skia/package.json +++ b/packages/skia/package.json @@ -12,7 +12,7 @@ "scripts": { "formatting": "prettier --experimental-cli src --check", "lint": "eslint src", - "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts" + "make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts" }, "author": "Jonny Burger , William Candillon ", "contributors": [], @@ -37,7 +37,8 @@ "react-dom": "catalog:", "remotion": "workspace:*", "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "keywords": [ "remotion", diff --git a/packages/streaming/package.json b/packages/streaming/package.json index d61e4d47d8c..ca0fea304c4 100644 --- a/packages/streaming/package.json +++ b/packages/streaming/package.json @@ -10,7 +10,7 @@ "scripts": { "lint": "eslint src", "formatting": "prettier --experimental-cli src --check", - "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts" + "make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts" }, "author": "Jonny Burger ", "contributors": [], @@ -23,7 +23,8 @@ }, "devDependencies": { "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "exports": { "./package.json": "./package.json", diff --git a/packages/studio-server/package.json b/packages/studio-server/package.json index 377effd2189..1332706d878 100644 --- a/packages/studio-server/package.json +++ b/packages/studio-server/package.json @@ -11,7 +11,7 @@ "lint": "eslint src", "test": "bun test src", "formatting": "prettier --experimental-cli src --check", - "make": "tsc -d" + "make": "tsgo -d" }, "author": "Jonny Burger ", "contributors": [], @@ -41,7 +41,8 @@ "@types/semver": "^7.3.4", "@remotion/eslint-config-internal": "workspace:*", "eslint": "catalog:", - "@types/node": "catalog:" + "@types/node": "catalog:", + "@typescript/native-preview": "catalog:" }, "exports": { ".": "./dist/index.js", diff --git a/packages/studio-shared/package.json b/packages/studio-shared/package.json index 81782dae3ba..2acf1af1f17 100644 --- a/packages/studio-shared/package.json +++ b/packages/studio-shared/package.json @@ -10,7 +10,7 @@ "scripts": { "lint": "eslint src", "formatting": "prettier --experimental-cli src --check", - "make": "tsc -d" + "make": "tsgo -d" }, "author": "Jonny Burger ", "contributors": [], @@ -24,7 +24,8 @@ "devDependencies": { "@remotion/renderer": "workspace:*", "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "publishConfig": { "access": "public" diff --git a/packages/studio-shared/src/package-info.ts b/packages/studio-shared/src/package-info.ts index bdd2abf82c0..b21576ded0f 100644 --- a/packages/studio-shared/src/package-info.ts +++ b/packages/studio-shared/src/package-info.ts @@ -102,7 +102,7 @@ export const extraPackages: ExtraPackage[] = [ }, { name: 'mediabunny', - version: '1.34.2', + version: '1.34.3', description: 'Multimedia library used by Remotion', docsUrl: 'https://www.remotion.dev/docs/mediabunny/version', }, diff --git a/packages/studio/bundle.ts b/packages/studio/bundle.ts index 29a0df9f21c..3747df00566 100644 --- a/packages/studio/bundle.ts +++ b/packages/studio/bundle.ts @@ -18,6 +18,7 @@ const external = [ 'zod', 'remotion/no-react', 'react/jsx-runtime', + 'mediabunny', ]; await buildPackage({ diff --git a/packages/studio/package.json b/packages/studio/package.json index 3927e1fb3d6..028b40cadcd 100644 --- a/packages/studio/package.json +++ b/packages/studio/package.json @@ -9,7 +9,7 @@ "sideEffects": false, "scripts": { "lint": "eslint src", - "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts", + "make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts", "test": "bun test src", "formatting": "prettier --experimental-cli src --check" }, @@ -43,7 +43,8 @@ "react-dom": "catalog:", "@types/semver": "^7.3.4", "@remotion/eslint-config-internal": "workspace:*", - "eslint": "catalog:" + "eslint": "catalog:", + "@typescript/native-preview": "catalog:" }, "publishConfig": { "access": "public" diff --git a/packages/studio/src/Studio.tsx b/packages/studio/src/Studio.tsx index 50bcac1849c..5a5961b73b0 100644 --- a/packages/studio/src/Studio.tsx +++ b/packages/studio/src/Studio.tsx @@ -4,6 +4,7 @@ import {Internals} from 'remotion'; import {Editor} from './components/Editor'; import {EditorContexts} from './components/EditorContexts'; import {ServerDisconnected} from './components/Notifications/ServerDisconnected'; +import {StaticFilesProvider} from './components/use-static-files'; import {FastRefreshContext} from './fast-refresh-context'; import {FastRefreshProvider} from './FastRefreshProvider'; import {injectCSS} from './helpers/inject-css'; @@ -35,17 +36,19 @@ const StudioInner: React.FC<{ audioLatencyHint={window.remotion_audioLatencyHint ?? 'interactive'} nonceContextSeed={fastRefreshes + manualRefreshes} > - - - - {readOnly - ? null - : createPortal( - , - getServerDisconnectedDomElement() as HTMLElement, - )} - - + + + + + {readOnly + ? null + : createPortal( + , + getServerDisconnectedDomElement() as HTMLElement, + )} + + + ); diff --git a/packages/studio/src/api/get-zod-schema-from-primitive.ts b/packages/studio/src/api/get-zod-schema-from-primitive.ts index b8373cae62a..31634ca99c9 100644 --- a/packages/studio/src/api/get-zod-schema-from-primitive.ts +++ b/packages/studio/src/api/get-zod-schema-from-primitive.ts @@ -1,6 +1,10 @@ -import type {ZodType} from '../components/get-zod-if-possible'; +import type {ZodType} from 'zod'; +import type {ZodType as ZodNamespace} from '../components/get-zod-if-possible'; -export const getZodSchemaFromPrimitive = (value: unknown, z: ZodType) => { +export function getZodSchemaFromPrimitive( + value: unknown, + z: ZodNamespace, +): ZodType { if (typeof value === 'string') { return z.string(); } @@ -17,4 +21,4 @@ export const getZodSchemaFromPrimitive = (value: unknown, z: ZodType) => { throw new Error( `visualControl(): Specify a schema for this value: ${stringified ?? '[non-serializable value]'}. See https://remotion.dev/docs/studio/visual-control`, ); -}; +} diff --git a/packages/studio/src/api/helpers/calc-new-props.ts b/packages/studio/src/api/helpers/calc-new-props.ts index 2df7d8c5b4a..ed4b617c2cb 100644 --- a/packages/studio/src/api/helpers/calc-new-props.ts +++ b/packages/studio/src/api/helpers/calc-new-props.ts @@ -1,4 +1,4 @@ -import type {_InternalTypes} from 'remotion'; +import type {AnyComposition} from 'remotion'; import {Internals, getRemotionEnvironment} from 'remotion'; import type {AnyZodObject} from 'zod'; @@ -12,7 +12,7 @@ export const calcNewProps = ( compositionId: string, defaultProps: UpdateDefaultPropsFunction, ): { - composition: _InternalTypes['AnyComposition']; + composition: AnyComposition; generatedDefaultProps: Record; } => { if (!getRemotionEnvironment().isStudio) { diff --git a/packages/studio/src/components/AssetSelector.tsx b/packages/studio/src/components/AssetSelector.tsx index 047c549563b..4ce691cb874 100644 --- a/packages/studio/src/components/AssetSelector.tsx +++ b/packages/studio/src/components/AssetSelector.tsx @@ -1,11 +1,5 @@ -import React, { - useCallback, - useContext, - useEffect, - useMemo, - useState, -} from 'react'; -import {getStaticFiles, type StaticFile} from '../api/get-static-files'; +import React, {useCallback, useContext, useMemo, useState} from 'react'; +import {Internals} from 'remotion'; import {writeStaticFile} from '../api/write-static-file'; import {StudioServerConnectionCtx} from '../helpers/client-id'; import {BACKGROUND, CLEAR_HOVER, LIGHT_TEXT} from '../helpers/colors'; @@ -16,8 +10,10 @@ import useAssetDragEvents from '../helpers/use-asset-drag-events'; import {FolderContext} from '../state/folders'; import {useZIndex} from '../state/z-index'; import {AssetFolderTree} from './AssetSelectorItem'; +import {CURRENT_ASSET_HEIGHT, CurrentAsset} from './CurrentAsset'; import {inlineCodeSnippet} from './Menu/styles'; import {showNotification} from './Notifications/NotificationCenter'; +import {useStaticFiles} from './use-static-files'; const container: React.CSSProperties = { display: 'flex', @@ -43,55 +39,40 @@ const label: React.CSSProperties = { fontSize: 14, }; -const list: React.CSSProperties = { - height: '100%', +const baseList: React.CSSProperties = { overflowY: 'auto', }; -type State = { - staticFiles: StaticFile[]; - publicFolderExists: string | null; -}; - export const AssetSelector: React.FC<{ readonly readOnlyStudio: boolean; }> = ({readOnlyStudio}) => { const {tabIndex} = useZIndex(); + const {canvasContent} = useContext(Internals.CompositionManager); const {assetFoldersExpanded, setAssetFoldersExpanded} = useContext(FolderContext); const [dropLocation, setDropLocation] = useState(null); - const {subscribeToEvent} = useContext(StudioServerConnectionCtx); const connectionStatus = useContext(StudioServerConnectionCtx) .previewServerState.type; const shouldAllowUpload = connectionStatus === 'connected' && !readOnlyStudio; - const [{publicFolderExists, staticFiles}, setState] = React.useState( - () => { - return { - staticFiles: getStaticFiles(), - publicFolderExists: window.remotion_publicFolderExists, - }; - }, - ); + const showCurrentAsset = canvasContent?.type === 'asset'; + + const list: React.CSSProperties = useMemo(() => { + return { + ...baseList, + height: showCurrentAsset + ? `calc(100% - ${CURRENT_ASSET_HEIGHT}px)` + : '100%', + }; + }, [showCurrentAsset]); + + const staticFiles = useStaticFiles(); + const publicFolderExists = window.remotion_publicFolderExists; const assetTree = useMemo(() => { return buildAssetFolderStructure(staticFiles, null, assetFoldersExpanded); }, [assetFoldersExpanded, staticFiles]); - useEffect(() => { - const onUpdate = () => { - setState({ - staticFiles: getStaticFiles(), - publicFolderExists: window.remotion_publicFolderExists, - }); - }; - - const unsub = subscribeToEvent('new-public-folder', onUpdate); - return () => { - unsub(); - }; - }, [subscribeToEvent]); - const toggleFolder = useCallback( (folderName: string, parentName: string | null) => { setAssetFoldersExpanded((p) => { @@ -162,6 +143,7 @@ export const AssetSelector: React.FC<{ onDragOver={shouldAllowUpload ? onDragOver : undefined} onDrop={shouldAllowUpload ? onDrop : undefined} > + {showCurrentAsset ? : null} {staticFiles.length === 0 ? ( publicFolderExists ? (
diff --git a/packages/studio/src/components/CurrentAsset.tsx b/packages/studio/src/components/CurrentAsset.tsx new file mode 100644 index 00000000000..003e7f6b274 --- /dev/null +++ b/packages/studio/src/components/CurrentAsset.tsx @@ -0,0 +1,152 @@ +import {formatBytes} from '@remotion/studio-shared'; +import {ALL_FORMATS, Input, UrlSource} from 'mediabunny'; +import React, {useContext, useEffect, useMemo, useState} from 'react'; +import {Internals, staticFile} from 'remotion'; +import {BACKGROUND, BORDER_COLOR} from '../helpers/colors'; +import {useStaticFiles} from './use-static-files'; + +export const CURRENT_ASSET_HEIGHT = 80; + +const container: React.CSSProperties = { + height: CURRENT_ASSET_HEIGHT, + display: 'block', + borderBottom: `1px solid ${BORDER_COLOR}`, + padding: 12, + color: 'white', + backgroundColor: BACKGROUND, +}; + +const title: React.CSSProperties = { + fontWeight: 'bold', + fontSize: 12, + whiteSpace: 'nowrap', + lineHeight: '18px', + backgroundColor: BACKGROUND, +}; + +const subtitle: React.CSSProperties = { + fontSize: 12, + opacity: 0.8, + whiteSpace: 'nowrap', + lineHeight: '18px', + backgroundColor: BACKGROUND, +}; + +const row: React.CSSProperties = { + display: 'flex', + flexDirection: 'row', + lineHeight: '18px', + backgroundColor: BACKGROUND, +}; + +const formatDuration = (seconds: number): string => { + const h = Math.floor(seconds / 3600); + const m = Math.floor((seconds % 3600) / 60); + const s = seconds % 60; + const sFixed = s.toFixed(2).padStart(5, '0'); + + if (h > 0) { + return `${h}:${String(m).padStart(2, '0')}:${sFixed}`; + } + + return `${String(m).padStart(2, '0')}:${sFixed}`; +}; + +type MediaMetadata = { + duration: number; + format: string; + width: number | null; + height: number | null; +}; + +export const CurrentAsset: React.FC = () => { + const {canvasContent} = useContext(Internals.CompositionManager); + + const assetName = + canvasContent?.type === 'asset' ? canvasContent.asset : null; + + const staticFiles = useStaticFiles(); + + const sizeInBytes = useMemo(() => { + if (!assetName) { + return null; + } + + const file = staticFiles.find((f) => f.name === assetName); + return file?.sizeInBytes ?? null; + }, [assetName, staticFiles]); + + const [mediaMetadata, setMediaMetadata] = useState( + null, + ); + + useEffect(() => { + setMediaMetadata(null); + + if (!assetName) { + return; + } + + const url = staticFile(assetName); + const input = new Input({ + formats: ALL_FORMATS, + source: new UrlSource(url), + }); + + Promise.all([ + input.computeDuration(), + input.getFormat(), + input.getPrimaryVideoTrack(), + ]) + .then(([duration, format, videoTrack]) => { + setMediaMetadata({ + duration, + format: format.name, + width: videoTrack?.displayWidth ?? null, + height: videoTrack?.displayHeight ?? null, + }); + }) + .catch(() => { + // InputDisposedError (user navigated away) and + // non-media files (e.g. .png, .json) — ignore silently + }); + + return () => { + input.dispose(); + }; + }, [assetName]); + + if (!assetName) { + return
; + } + + const fileName = assetName.split('/').pop() ?? assetName; + + const subtitleParts: string[] = []; + if (sizeInBytes !== null) { + subtitleParts.push(formatBytes(sizeInBytes)); + } + + if (mediaMetadata) { + subtitleParts.push(mediaMetadata.format); + if (mediaMetadata.width !== null && mediaMetadata.height !== null) { + subtitleParts.push(`${mediaMetadata.width}x${mediaMetadata.height}`); + } + } + + return ( +
+
+
+
{fileName}
+ {subtitleParts.length > 0 ? ( +
{subtitleParts.join(' · ')}
+ ) : null} + {mediaMetadata ? ( +
{formatDuration(mediaMetadata.duration)}
+ ) : null} +
+
+
+ ); +}; diff --git a/packages/studio/src/components/InitialCompositionLoader.tsx b/packages/studio/src/components/InitialCompositionLoader.tsx index 2c95104f27d..3a8c30056fb 100644 --- a/packages/studio/src/components/InitialCompositionLoader.tsx +++ b/packages/studio/src/components/InitialCompositionLoader.tsx @@ -2,7 +2,6 @@ import type React from 'react'; import {useCallback, useContext, useEffect} from 'react'; import type {_InternalTypes} from 'remotion'; import {Internals} from 'remotion'; -import {getStaticFiles} from '../api/get-static-files'; import {useMobileLayout} from '../helpers/mobile-layout'; import type {ExpandedFoldersState} from '../helpers/persist-open-folders'; import {getRoute, pushUrl} from '../helpers/url-state'; @@ -11,6 +10,7 @@ import {SidebarContext} from '../state/sidebar'; import {getKeysToExpand} from './CompositionSelector'; import {explorerSidebarTabs} from './ExplorerPanel'; import {deriveCanvasContentFromUrl} from './load-canvas-content-from-url'; +import {useStaticFiles} from './use-static-files'; export const useSelectAsset = () => { const {setCanvasContent} = useContext(Internals.CompositionSetters); @@ -88,6 +88,7 @@ export const InitialCompositionLoader: React.FC = () => { const {setCanvasContent} = useContext(Internals.CompositionSetters); const selectComposition = useSelectComposition(); const selectAsset = useSelectAsset(); + const staticFiles = useStaticFiles(); useEffect(() => { if (canvasContent) { @@ -141,7 +142,6 @@ export const InitialCompositionLoader: React.FC = () => { } if (newCanvas && newCanvas.type === 'asset') { - const staticFiles = getStaticFiles(); const exists = staticFiles.find((file) => { return file.name === newCanvas.asset; }); @@ -159,7 +159,7 @@ export const InitialCompositionLoader: React.FC = () => { window.addEventListener('popstate', onchange); return () => window.removeEventListener('popstate', onchange); - }, [compositions, selectComposition, setCanvasContent]); + }, [compositions, selectComposition, setCanvasContent, staticFiles]); return null; }; diff --git a/packages/studio/src/components/OptionsPanel.tsx b/packages/studio/src/components/OptionsPanel.tsx index bd87886b93b..f6952d04148 100644 --- a/packages/studio/src/components/OptionsPanel.tsx +++ b/packages/studio/src/components/OptionsPanel.tsx @@ -11,6 +11,7 @@ import type {_InternalTypes} from 'remotion'; import {Internals} from 'remotion'; import {BACKGROUND} from '../helpers/colors'; import {useMobileLayout} from '../helpers/mobile-layout'; +import {SHOW_BROWSER_RENDERING} from '../helpers/show-browser-rendering'; import {VisualControlsTabActivatedContext} from '../visual-controls/VisualControls'; import {GlobalPropsEditorUpdateButton} from './GlobalPropsEditorUpdateButton'; import {DataEditor} from './RenderModal/DataEditor'; @@ -24,8 +25,8 @@ type OptionsSidebarPanel = 'input-props' | 'renders' | 'visual-controls'; const localStorageKey = 'remotion.sidebarPanel'; -const getSelectedPanel = (readOnlyStudio: boolean): OptionsSidebarPanel => { - if (readOnlyStudio) { +const getSelectedPanel = (renderingAvailable: boolean): OptionsSidebarPanel => { + if (!renderingAvailable) { return 'input-props'; } @@ -63,6 +64,8 @@ export const OptionsPanel: React.FC<{ ); const [saving, setSaving] = useState(false); + const renderingAvailable = !readOnlyStudio || SHOW_BROWSER_RENDERING; + const isMobileLayout = useMobileLayout(); const visualControlsTabActivated = useContext( @@ -82,7 +85,7 @@ export const OptionsPanel: React.FC<{ ); const [panel, setPanel] = useState(() => - getSelectedPanel(readOnlyStudio), + getSelectedPanel(renderingAvailable), ); const onPropsSelected = useCallback(() => { setPanel('input-props'); @@ -207,12 +210,12 @@ export const OptionsPanel: React.FC<{ ) : null} ) : null} - {readOnlyStudio ? null : ( + {renderingAvailable ? ( - )} + ) : null}
{panel === `input-props` && composition ? ( @@ -229,7 +232,7 @@ export const OptionsPanel: React.FC<{ /> ) : panel === 'visual-controls' && visualControlsTabActivated ? ( - ) : readOnlyStudio ? null : ( + ) : !renderingAvailable ? null : ( )}
diff --git a/packages/studio/src/components/RenderButton.tsx b/packages/studio/src/components/RenderButton.tsx index e9b92430c08..b4675dd0609 100644 --- a/packages/studio/src/components/RenderButton.tsx +++ b/packages/studio/src/components/RenderButton.tsx @@ -120,8 +120,8 @@ export const RenderButton: React.FC<{readonly readOnlyStudio: boolean}> = ({ }) => { const {inFrame, outFrame} = useTimelineInOutFramePosition(); const {setSelectedModal} = useContext(ModalsContext); - const [renderType, setRenderType] = useState(() => - getInitialRenderType(readOnlyStudio), + const [preferredRenderType, setPreferredRenderType] = useState( + () => getInitialRenderType(readOnlyStudio), ); const [dropdownOpened, setDropdownOpened] = useState(false); const dropdownRef = useRef(null); @@ -178,11 +178,25 @@ export const RenderButton: React.FC<{readonly readOnlyStudio: boolean}> = ({ const connectionStatus = useContext(StudioServerConnectionCtx) .previewServerState.type; + + const canRender = connectionStatus === 'connected' || SHOW_BROWSER_RENDERING; + + const renderType: RenderType = useMemo(() => { + if (connectionStatus === 'disconnected' && SHOW_BROWSER_RENDERING) { + return 'client-render'; + } + + if (!SHOW_BROWSER_RENDERING) { + return 'server-render'; + } + + return preferredRenderType; + }, [connectionStatus, preferredRenderType]); + const shortcut = areKeyboardShortcutsDisabled() ? '' : '(R)'; - const tooltip = - connectionStatus === 'connected' - ? 'Export the current composition ' + shortcut - : 'Connect to the Studio server to render'; + const tooltip = canRender + ? 'Export the current composition ' + shortcut + : 'Connect to the Studio server to render'; const iconStyle: SVGProps = useMemo(() => { return { @@ -315,7 +329,7 @@ export const RenderButton: React.FC<{readonly readOnlyStudio: boolean}> = ({ const handleRenderTypeChange = useCallback( (newType: RenderType) => { - setRenderType(newType); + setPreferredRenderType(newType); try { localStorage.setItem(RENDER_TYPE_STORAGE_KEY, newType); } catch { @@ -405,10 +419,10 @@ export const RenderButton: React.FC<{readonly readOnlyStudio: boolean}> = ({ return { ...splitButtonContainer, borderColor: INPUT_BORDER_COLOR_UNHOVERED, - opacity: connectionStatus !== 'connected' ? 0.7 : 1, - cursor: connectionStatus !== 'connected' ? 'inherit' : 'pointer', + opacity: canRender ? 1 : 0.7, + cursor: canRender ? 'pointer' : 'inherit', }; - }, [connectionStatus]); + }, [canRender]); const renderLabel = renderType === 'server-render' ? 'Render' : 'Render on web'; @@ -436,9 +450,7 @@ export const RenderButton: React.FC<{readonly readOnlyStudio: boolean}> = ({