UNPKG

@sanity/import

Version:

Import documents to a Sanity dataset

62 lines (50 loc) 1.41 kB
const crypto = require('crypto') const {URL} = require('url') const {getIt} = require('get-it') const {promise} = require('get-it/middleware') const getUri = require('get-uri') const miss = require('mississippi') const retryOnFailure = require('./retryOnFailure') const request = getIt([promise()]) module.exports = (uri) => retryOnFailure(() => getHashedBufferForUri(uri)) async function getHashedBufferForUri(uri) { const stream = await getStream(uri) return new Promise((resolve, reject) => { const hash = crypto.createHash('sha1') const chunks = [] stream.on('data', (chunk) => { chunks.push(chunk) hash.update(chunk) }) miss.finished(stream, (err) => { if (err) { reject(err) return } resolve({ buffer: Buffer.concat(chunks), sha1hash: hash.digest('hex'), }) }) }) } function getStream(uri) { const isHttp = /^https?:\/\//i.test(uri) const parsed = new URL(uri) if (isHttp) { return request({url: parsed.href, stream: true}).then((res) => res.body) } // For file, ftp, data urls return new Promise((resolve, reject) => getUri(uri, (err, stream) => { if (err) { reject(new Error(readError(uri, err))) return } resolve(stream) }), ) } function readError(uri, err) { return `Error while fetching asset from "${uri}":\n${err.message}` }