Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
function readAsBlobOrBuffer(storedObject, type) {
// In the browser, we've stored a binary string. This now comes back as a
// browserified Node-style Buffer (implemented as a typed array),
// but we want a Blob instead.
var byteArray = new Uint8Array(storedObject);
return createBlob([byteArray], {type: type});
}
function readAsBlobOrBuffer(storedObject, type) {
// In the browser, we've stored a binary string. This now comes back as a
// browserified Node-style Buffer (implemented as a typed array),
// but we want a Blob instead.
var byteArray = new Uint8Array(storedObject);
return createBlob([byteArray], {type: type});
}
function readAsBlobOrBuffer(storedObject, type) {
// In the browser, we've stored a binary string. This now comes back as a
// browserified Node-style Buffer (implemented as a typed array),
// but we want a Blob instead.
var byteArray = new Uint8Array(storedObject);
return pouchdbBinaryUtils.blob([byteArray], {type: type});
}
return new Promise(function (resolve) {
var blob = createBlob(['']);
var req = txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');
req.onsuccess = function () {
var matchedChrome = navigator.userAgent.match(/Chrome\/(\d+)/);
var matchedEdge = navigator.userAgent.match(/Edge\//);
// MS Edge pretends to be Chrome 42:
// https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx
resolve(matchedEdge || !matchedChrome ||
parseInt(matchedChrome[1], 10) >= 43);
};
req.onerror = txn.onabort = function (e) {
// If the transaction aborts now its due to not being able to
// write to the database, likely due to the disk being full
e.preventDefault();
e.stopPropagation();
function readBlobData(body, type, asBlob, callback) {
if (asBlob) {
if (!body) {
callback(createBlob([''], {type: type}));
} else if (typeof body !== 'string') { // we have blob support
callback(body);
} else { // no blob support
callback(b64StringToBlob(body, type));
}
} else { // as base64 string
if (!body) {
callback('');
} else if (typeof body !== 'string') { // we have blob support
readAsBinaryString(body, function (binary) {
callback(btoa(binary));
});
} else { // no blob support
callback(body);
}
}
function preprocessString(att, blobType, callback) {
var asBinary = parseBase64(att.data);
if (asBinary.error) {
return callback(asBinary.error);
}
att.length = asBinary.length;
if (blobType === 'blob') {
att.data = binStringToBlobOrBuffer(asBinary, att.content_type);
} else if (blobType === 'base64') {
att.data = btoa(asBinary);
} else { // binary
att.data = asBinary;
}
binaryMd5(asBinary, function (result) {
att.digest = 'md5-' + result;
callback();
});
}
tx.executeSql(sql, [digest], function (tx, result) {
// websql has a bug where \u0000 causes early truncation in strings
// and blobs. to work around this, we used to use the hex() function,
// but that's not performant. after migration 6, we remove \u0000
// and add it back in afterwards
var item = result.rows.item(0);
var data = item.escaped ? unescapeBlob(item.body) :
parseHexString(item.body, encoding);
if (opts.binary) {
res = binStringToBlob(data, type);
} else {
res = btoa(data);
}
callback(null, res);
});
};
stores.binaryStore.get(att.digest, function (err, buffer) {
var data
if (err) {
/* istanbul ignore if */
if (err.name !== 'NotFoundError') {
return reject(err)
} else {
// empty
if (!opts.binary) {
data = ''
} else {
data = binStringToBluffer('', type)
}
}
} else { // non-empty
if (opts.binary) {
data = readAsBluffer(buffer, type)
} else {
data = buffer.toString('base64')
}
}
delete att.stub
delete att.length
att.data = data
resolve()
})
})
stores.binaryStore.get(att.digest, function (err, buffer) {
var data;
if (err) {
/* istanbul ignore if */
if (err.name !== 'NotFoundError') {
return reject(err);
} else {
// empty
if (!opts.binary) {
data = '';
} else {
data = binStringToBluffer('', type);
}
}
} else { // non-empty
if (opts.binary) {
data = readAsBluffer(buffer, type);
} else {
data = buffer.toString('base64');
}
}
delete att.stub;
delete att.length;
att.data = data;
resolve();
});
});
stores.binaryStore.get(att.digest, function (err, buffer) {
var data;
if (err) {
/* istanbul ignore if */
if (err.name !== 'NotFoundError') {
return reject(err);
} else {
// empty
if (!opts.binary) {
data = '';
} else {
data = pouchdbBinaryUtils.binaryStringToBlobOrBuffer('', type);
}
}
} else { // non-empty
if (opts.binary) {
data = readAsBlobOrBuffer(buffer, type);
} else {
data = buffer.toString('base64');
}
}
delete att.stub;
delete att.length;
att.data = data;
resolve();
});
});