started with import stream parser

This commit is contained in:
Andris Reinman 2022-09-20 15:49:14 +03:00
parent c1acc970d1
commit e213df2255
No known key found for this signature in database
GPG key ID: DC6C83F4D584D364

View file

@ -104,6 +104,67 @@ class ExportStream extends Transform {
}
}
class ImportStream extends Transform {
constructor() {
super({ readableObjectMode: true, writableObjectMode: false });
this.TYPE_HEADER = 0x01;
this.TYPE_CONTENT = 0x02;
this.magickBuffer = [];
this.magickFound = false;
this.entryBuffer = false;
}
readMagick(data) {
if (this.magickFound) {
return data;
}
let removeSuffix = 0;
for (let i = 0; i < data.length; i++) {
this.magickBuffer.push(data[i]);
removeSuffix++;
if (this.magickBuffer.length === 3) {
if (Buffer.concat(this.magickBuffer).compare(Buffer.from([0x09, 0x06, 0x82]))) {
this.magickFound = true;
break;
} else {
let error = new Error('Invalid content sequence');
error.code = 'INVALID_SEQUENCE';
throw error;
}
}
}
if (removeSuffix) {
return data.slice(removeSuffix);
}
return data;
}
async readRecords(data) {}
_transform(data, encoding, done) {
try {
data = this.readMagick(data);
} catch (err) {
if (err) {
return done(err);
}
}
this.readRecords(data)
.then(() => done())
.catch(err => done(err));
}
_flush(done) {
done();
}
}
module.exports = (db, server, userHandler, settingsHandler) => {
const taskHandler = new TaskHandler({ database: db.database });