Files
2026-02-21 10:33:18 +01:00

61 lines
1.5 KiB
JavaScript

// src/writers/buffer-implementation/writer.ts
var createContent = ({
filename,
mimeType
}) => {
const buf = new ArrayBuffer(0, {
maxByteLength: 2000000000
});
if (!buf.resize) {
throw new Error("Could not create buffer writer");
}
const write = (newData) => {
const oldLength = buf.byteLength;
const newLength = oldLength + newData.byteLength;
buf.resize(newLength);
const newArray = new Uint8Array(buf);
newArray.set(newData, oldLength);
};
const updateDataAt = (position, newData) => {
const newArray = new Uint8Array(buf);
newArray.set(newData, position);
};
let writPromise = Promise.resolve();
let removed = false;
const writer = {
write: (arr) => {
writPromise = writPromise.then(() => write(arr));
return writPromise;
},
finish: async () => {
await writPromise;
if (removed) {
return Promise.reject(new Error("Already called .remove() on the result"));
}
return Promise.resolve();
},
getBlob() {
const arr = new Uint8Array(buf);
return Promise.resolve(new File([arr.slice()], filename, { type: mimeType }));
},
remove() {
removed = true;
return Promise.resolve();
},
getWrittenByteCount: () => buf.byteLength,
updateDataAt: (position, newData) => {
writPromise = writPromise.then(() => updateDataAt(position, newData));
return writPromise;
}
};
return Promise.resolve(writer);
};
// src/writers/buffer.ts
var bufferWriter = {
createContent
};
export {
bufferWriter
};