Condimentum vitae sapien pellentesque habitant morbi tristique senectus et netus.
Diam volutpat commodo sed egestas egestas fringilla phasellus. Faucibus et molestie ac feugiat. Sit amet volutpat consequat mauris nunc congue nisi. Tempus imperdiet nulla malesuada pellentesque elit. Amet cursus sit amet dictum. Nisl nunc mi ipsum faucibus. Iaculis at erat pellentesque adipiscing commodo elit at imperdiet. Ultricies lacus sed turpis tincidunt id aliquet. Risus nullam eget felis eget nunc. Vel elit scelerisque mauris pellentesque pulvinar. Ut etiam sit amet nisl purus in mollis nunc sed. Egestas congue quisque egestas diam in. Ac ut consequat semper viverra nam. Turpis tincidunt id aliquet risus feugiat in ante metus. Sollicitudin nibh sit amet commodo nulla facilisi nullam vehicula ipsum. Pharetra massa massa ultricies mi quis. Ultricies integer quis auctor elit. Aliquam sem et tortor consequat id.
Pellentesque id nibh tortor id aliquet lectus proin. In arcu cursus euismod quis viverra. Tempor nec feugiat nisl pretium fusce. Suspendisse potenti nullam ac tortor vitae purus. Ante in nibh mauris cursus mattis molestie a iaculis at. In cursus turpis massa tincidunt dui ut ornare. Malesuada pellentesque elit eget gravida. Quis enim lobortis scelerisque fermentum. Habitasse platea dictumst vestibulum rhoncus est pellentesque elit ullamcorper. Eu nisl nunc mi ipsum faucibus vitae aliquet. Neque convallis a cras semper auctor neque vitae tempus quam. Maecenas sed enim ut sem. Eleifend mi in nulla posuere sollicitudin aliquam. Augue mauris augue neque gravida in fermentum. Eget nulla facilisi etiam dignissim. Cursus sit amet dictum sit amet justo donec enim. Cras sed felis eget velit aliquet sagittis id.
import path from 'path'
import fs from 'fs-extra'
import got from 'got'
import type { Manifest } from '../types'
type ExternalImagesDownloaderArgs = {
terse?: boolean
manifest: Manifest
destDir: string
}
const externalImagesDownloader = async ({ terse = false, manifest, destDir }: ExternalImagesDownloaderArgs) => {
if (!terse) {
// eslint-disable-next-line no-console
console.log('\n- Download external images -')
}
const promises: Promise<void>[] = []
const downloadedImages: string[] = []
for (const { src, externalUrl } of manifest) {
if (externalUrl === undefined) continue
if (downloadedImages.some((image) => image === externalUrl)) continue
promises.push(
(async () => {
downloadedImages.push(externalUrl)
const outputPath = path.join(destDir, src)
await fs.ensureFile(outputPath)
await new Promise((resolve, reject) => {
try {
const readStream = got.stream(externalUrl)
const writeStream = fs.createWriteStream(outputPath)
readStream.pipe(writeStream)
writeStream.on('finish', () => {
if (!terse) {
// eslint-disable-next-line no-console
console.log(`\`${externalUrl}\` has been downloaded.`)
}
resolve(undefined)
})
} catch (e) {
reject(e)
}
})
})()
)
}
await Promise.all(promises)
}
export default externalImagesDownloader
Et malesuada fames ac turpis egestas integer eget. Viverra tellus in hac habitasse platea dictumst vestibulum rhoncus est. Nisi quis eleifend quam adipiscing vitae proin sagittis nisl. Mattis pellentesque id nibh tortor id aliquet lectus. Purus ut faucibus pulvinar elementum integer enim neque. Mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus. In hac habitasse platea dictumst. Nulla malesuada pellentesque elit eget. Neque sodales ut etiam sit amet nisl purus. Aliquet enim tortor at auctor urna. Curabitur vitae nunc sed velit dignissim sodales ut eu sem. Blandit cursus risus at ultrices mi. Ultrices neque ornare aenean euismod. Viverra justo nec ultrices dui sapien eget. Amet consectetur adipiscing elit ut. Etiam erat velit scelerisque in dictum non consectetur a. Tortor consequat id porta nibh. Tempus urna et pharetra pharetra massa. In fermentum posuere urna nec tincidunt praesent semper feugiat.
Posuere ac ut consequat semper viverra nam libero. In mollis nunc sed id semper risus. Sed risus pretium quam vulputate dignissim suspendisse in. Scelerisque felis imperdiet proin fermentum leo vel orci porta non. In vitae turpis massa sed. Tincidunt praesent semper feugiat nibh. Mauris rhoncus aenean vel elit scelerisque mauris pellentesque pulvinar pellentesque. Dui vivamus arcu felis bibendum ut tristique et egestas quis. At risus viverra adipiscing at in tellus integer. Donec pretium vulputate sapien nec sagittis.
Velit dignissim sodales ut eu. Mattis molestie a iaculis at erat. Justo laoreet sit amet cursus sit. Magnis dis parturient montes nascetur ridiculus mus. Sed ullamcorper morbi tincidunt ornare massa eget egestas purus. Nec dui nunc mattis enim ut. Iaculis urna id volutpat lacus laoreet. In fermentum et sollicitudin ac orci phasellus egestas tellus. Pulvinar elementum integer enim neque volutpat ac tincidunt. Scelerisque eleifend donec pretium vulputate sapien nec. Ac orci phasellus egestas tellus rutrum. At varius vel pharetra vel turpis nunc eget. Dictumst quisque sagittis purus sit amet volutpat consequat mauris nunc. Arcu ac tortor dignissim convallis aenean et tortor at risus. Sollicitudin ac orci phasellus egestas. Et malesuada fames ac turpis egestas sed tempus urna. Vulputate dignissim suspendisse in est ante in. Nibh sit amet commodo nulla facilisi nullam. Dignissim cras tincidunt lobortis feugiat.