Files

42 lines
1.3 KiB
JavaScript

let sessionId = null;
const getPrefix = () => {
if (!sessionId) {
sessionId = crypto.randomUUID();
}
return `__remotion_render:${sessionId}:`;
};
export const cleanupStaleOpfsFiles = async () => {
try {
const root = await navigator.storage.getDirectory();
for await (const [name] of root.entries()) {
if (name.startsWith('__remotion_render:') &&
!name.startsWith(getPrefix())) {
await root.removeEntry(name);
}
}
}
catch (_a) {
// Ignore, could already be closed
}
};
export const createWebFsTarget = async () => {
const directoryHandle = await navigator.storage.getDirectory();
const filename = `${getPrefix()}${crypto.randomUUID()}`;
const fileHandle = await directoryHandle.getFileHandle(filename, {
create: true,
});
const writable = await fileHandle.createWritable();
const stream = new WritableStream({
async write(chunk) {
await writable.seek(chunk.position);
await writable.write(chunk);
},
});
const getBlob = async () => {
const handle = await directoryHandle.getFileHandle(filename);
return handle.getFile();
};
const close = () => writable.close();
return { stream, getBlob, close };
};