86 lines
2.6 KiB
JavaScript
86 lines
2.6 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.canUseWebFsWriter = exports.webFsWriter = void 0;
|
|
const createContent = async ({ filename, }) => {
|
|
const directoryHandle = await navigator.storage.getDirectory();
|
|
const actualFilename = `__remotion_mediaparser:${filename}`;
|
|
const remove = async () => {
|
|
try {
|
|
await directoryHandle.removeEntry(actualFilename, {
|
|
recursive: true,
|
|
});
|
|
}
|
|
catch { }
|
|
};
|
|
await remove();
|
|
const fileHandle = await directoryHandle.getFileHandle(actualFilename, {
|
|
create: true,
|
|
});
|
|
const writable = await fileHandle.createWritable();
|
|
let written = 0;
|
|
let writPromise = Promise.resolve();
|
|
const write = async (arr) => {
|
|
// @ts-expect-error
|
|
await writable.write(arr);
|
|
written += arr.byteLength;
|
|
};
|
|
const updateDataAt = async (position, data) => {
|
|
await writable.seek(position);
|
|
// @ts-expect-error
|
|
await writable.write(data);
|
|
await writable.seek(written);
|
|
};
|
|
const writer = {
|
|
write: (arr) => {
|
|
writPromise = writPromise.then(() => write(arr));
|
|
return writPromise;
|
|
},
|
|
finish: async () => {
|
|
await writPromise;
|
|
try {
|
|
await writable.close();
|
|
}
|
|
catch {
|
|
// Ignore, could already be closed
|
|
}
|
|
},
|
|
async getBlob() {
|
|
const newHandle = await directoryHandle.getFileHandle(actualFilename, {
|
|
create: true,
|
|
});
|
|
const newFile = await newHandle.getFile();
|
|
return newFile;
|
|
},
|
|
getWrittenByteCount: () => written,
|
|
updateDataAt: (position, data) => {
|
|
writPromise = writPromise.then(() => updateDataAt(position, data));
|
|
return writPromise;
|
|
},
|
|
remove,
|
|
};
|
|
return writer;
|
|
};
|
|
exports.webFsWriter = {
|
|
createContent,
|
|
};
|
|
const canUseWebFsWriter = async () => {
|
|
if (!('storage' in navigator)) {
|
|
return false;
|
|
}
|
|
if (!('getDirectory' in navigator.storage)) {
|
|
return false;
|
|
}
|
|
try {
|
|
const directoryHandle = await navigator.storage.getDirectory();
|
|
const fileHandle = await directoryHandle.getFileHandle('remotion-probe-web-fs-support', {
|
|
create: true,
|
|
});
|
|
const canUse = fileHandle.createWritable !== undefined;
|
|
return canUse;
|
|
}
|
|
catch {
|
|
return false;
|
|
}
|
|
};
|
|
exports.canUseWebFsWriter = canUseWebFsWriter;
|