@remotion/media-parser
Version:
A pure JavaScript library for parsing video files
82 lines (81 loc) • 3.16 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.nodeWriter = void 0;
const node_fs_1 = __importDefault(require("node:fs"));
const log_1 = require("../log");
const createContent = (filename) => {
return async ({ logLevel }) => {
let writPromise = Promise.resolve();
const remove = async () => {
log_1.Log.verbose(logLevel, 'Removing file', filename);
await node_fs_1.default.promises.unlink(filename).catch(() => { });
};
await remove();
if (!node_fs_1.default.existsSync(filename)) {
log_1.Log.verbose(logLevel, 'Creating file', filename);
node_fs_1.default.writeFileSync(filename, '');
}
const writeStream = node_fs_1.default.openSync(filename, 'w');
let written = 0;
const write = async (data) => {
await new Promise((resolve, reject) => {
node_fs_1.default.write(writeStream, data, 0, data.length, undefined, (err) => {
if (err) {
reject(err);
return;
}
log_1.Log.verbose(logLevel, 'Wrote', data.length, 'bytes to', filename);
resolve();
});
});
written += data.byteLength;
};
const updateDataAt = (position, data) => {
return new Promise((resolve, reject) => {
node_fs_1.default.write(writeStream, data, 0, data.length, position, (err) => {
if (err) {
reject(err);
return;
}
log_1.Log.verbose(logLevel, 'Wrote', data.length, 'bytes to', filename, 'at position', position);
resolve();
});
});
};
const writer = {
write: (arr) => {
writPromise = writPromise.then(() => write(arr));
return writPromise;
},
updateDataAt: (position, data) => {
writPromise = writPromise.then(() => updateDataAt(position, data));
return writPromise;
},
getWrittenByteCount: () => written,
remove,
finish: async () => {
await writPromise;
try {
log_1.Log.verbose(logLevel, 'Closing file', filename);
node_fs_1.default.closeSync(writeStream);
return Promise.resolve();
}
catch (e) {
return Promise.reject(e);
}
},
getBlob: async () => {
const file = await node_fs_1.default.promises.readFile(filename);
return new Blob([file]);
},
};
return writer;
};
};
const nodeWriter = (path) => {
return { createContent: createContent(path) };
};
exports.nodeWriter = nodeWriter;