@sanity/import
Version:
Import documents to a Sanity dataset
50 lines (49 loc) • 1.84 kB
JavaScript
const MAX_PAYLOAD_SIZE = 1024 * 256 // 256KB
;
function batchDocuments(docs) {
let currentBatch = [];
let currentBatchSize = 0;
const batches = [
currentBatch
];
for (const doc of docs){
const docSize = JSON.stringify(doc).length;
const newBatchSize = currentBatchSize + docSize;
// If this document pushes us over the max payload size, start a new batch
if (currentBatchSize > 0 && newBatchSize > MAX_PAYLOAD_SIZE) {
currentBatch = [
doc
];
currentBatchSize = docSize;
batches.push(currentBatch);
continue;
}
// If this document *alone* is over the max payload size, try to allow it
// on it's own. Server has slightly higher payload size than defined here
if (docSize > MAX_PAYLOAD_SIZE) {
if (currentBatchSize === 0) {
// We're alone in a new batch, so push this doc into it and start a new
// one for the next document in line
currentBatch.push(doc);
currentBatchSize = docSize;
currentBatch = [];
batches.push(currentBatch);
continue;
}
// Batch already has documents, so "close" that batch off and push this
// huge document into it's own batch
currentBatch = [];
currentBatchSize = 0;
batches.push([
doc
], currentBatch);
}
// Otherwise, we should be below the max size, so push this document into
// the batch and increase the size of it to match
currentBatch.push(doc);
currentBatchSize += docSize;
}
return batches;
}
export { batchDocuments };
//# sourceMappingURL=batchDocuments.js.map