chainscript
Version:
Client for chainscript.io
68 lines (49 loc) • 1.64 kB
JavaScript
;
exports.__esModule = true;
exports['default'] = writeToPDF;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
/**
* This could be improved by not putting the entire PDF in a buffer.
*/
function writeToPDF(input, output, script) {
return new Promise(function (resolve, reject) {
var reader = typeof input === 'string' ? _fs2['default'].createReadStream(input) : input;
var buffer = new Buffer([]);
reader.on('error', reject);
reader.on('data', function (data) {
return buffer = Buffer.concat([buffer, data]);
});
reader.on('end', function () {
var start = buffer.indexOf('\n% Chainscript: ');
var end = undefined;
if (start < 0) {
var pos = 0;
do {
pos = buffer.indexOf('startxref', pos + 9);
if (pos >= 0) {
start = end = pos;
}
} while (pos >= 0);
if (start < 0) {
reject(new Error('Could not find startxref'));
return;
}
} else {
end = buffer.indexOf('\n', start + 16) + 1;
}
var writer = typeof output === 'string' ? _fs2['default'].createWriteStream(output, {
defaultEncoding: 'binary',
mode: 420
}) : output;
writer.on('error', reject);
writer.write(buffer.slice(0, start));
if (script) {
writer.write('\n% Chainscript: ' + JSON.stringify(script) + '\n');
}
writer.end(buffer.slice(end), resolve);
});
});
}
module.exports = exports['default'];