-
-
Notifications
You must be signed in to change notification settings - Fork 1k
/
watch-public-folder.ts
38 lines (30 loc) · 1.22 KB
/
watch-public-folder.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import {getRemotionEnvironment} from 'remotion';
import {getStaticFiles, type StaticFile} from './get-static-files';
type WatcherCallback = (newFiles: StaticFile[]) => void;
export const WATCH_REMOTION_STATIC_FILES = 'remotion_staticFilesChanged';
/**
* @description Watch for changes in the public folder.
* @param {Function} callback - A callback function to be called when the file changes.
* @returns {{cancel: () => void}} A function that can be used to cancel the event listener.
* @see [Documentation](https://remotion.dev/docs/studio/watch-public-folder)
*/
export const watchPublicFolder = (
callback: WatcherCallback,
): {cancel: () => void} => {
if (!getRemotionEnvironment().isStudio) {
// eslint-disable-next-line no-console
console.warn('The API is only available while using the Remotion Studio.');
return {cancel: () => undefined};
}
if (window.remotion_isReadOnlyStudio) {
throw new Error('watchPublicFolder() is not available in read-only Studio');
}
const emitUpdate = () => {
callback(getStaticFiles());
};
window.addEventListener(WATCH_REMOTION_STATIC_FILES, emitUpdate);
const cancel = () => {
return window.removeEventListener(WATCH_REMOTION_STATIC_FILES, emitUpdate);
};
return {cancel};
};