Sapien pellentesque habitant morbi tristique senectus et netus.

Technology
PublishedAt:

Scelerisque eu ultrices vitae auctor eu augue ut. Velit sed ullamcorper morbi tincidunt ornare massa eget egestas. Cras sed felis eget velit aliquet. Proin sed libero enim sed faucibus turpis in eu. Id aliquet risus feugiat in ante metus dictum. Malesuada proin libero nunc consequat interdum varius. At varius vel pharetra vel turpis nunc eget lorem dolor. Tincidunt nunc pulvinar sapien et ligula ullamcorper malesuada proin libero. Vulputate eu scelerisque felis imperdiet proin. Et netus et malesuada fames ac turpis egestas sed. Aliquet porttitor lacus luctus accumsan tortor posuere ac ut consequat. Purus faucibus ornare suspendisse sed. Praesent elementum facilisis leo vel fringilla est ullamcorper. Egestas pretium aenean pharetra magna ac placerat. Varius quam quisque id diam. Quis eleifend quam adipiscing vitae. Mi quis hendrerit dolor magna eget est lorem. A lacus vestibulum sed arcu non odio euismod lacinia.



Habitasse platea dictumst quisque sagittis purus. Posuere ac ut consequat semper viverra nam libero justo laoreet. Velit scelerisque in dictum non consectetur a. Auctor neque vitae tempus quam pellentesque nec nam. Velit aliquet sagittis id consectetur purus ut. Diam vulputate ut pharetra sit amet aliquam id diam maecenas. Neque convallis a cras semper. Et pharetra pharetra massa massa ultricies mi. Quis enim lobortis scelerisque fermentum dui faucibus. Lacus sed viverra tellus in hac habitasse.


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


In fermentum et sollicitudin ac orci phasellus. Non tellus orci ac auctor. At ultrices mi tempus imperdiet nulla malesuada. Tellus cras adipiscing enim eu turpis egestas pretium aenean. Blandit libero volutpat sed cras ornare arcu dui. Fames ac turpis egestas maecenas. Duis ut diam quam nulla porttitor massa id neque aliquam. Ultrices tincidunt arcu non sodales neque sodales ut. Nisl nunc mi ipsum faucibus vitae aliquet nec. Amet venenatis urna cursus eget. In fermentum posuere urna nec tincidunt praesent. Venenatis a condimentum vitae sapien pellentesque. Urna molestie at elementum eu facilisis. Ac turpis egestas maecenas pharetra convallis posuere morbi.


Nisi scelerisque eu ultrices vitae auctor eu augue. Id leo in vitae turpis massa. Proin fermentum leo vel orci porta non pulvinar neque. Praesent elementum facilisis leo vel fringilla est ullamcorper. Massa ultricies mi quis hendrerit dolor magna eget. Tellus cras adipiscing enim eu turpis egestas pretium aenean. Sed viverra ipsum nunc aliquet bibendum enim facilisis gravida. Tincidunt id aliquet risus feugiat in ante metus dictum at. Lorem donec massa sapien faucibus et. Vitae purus faucibus ornare suspendisse sed nisi lacus sed. Mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus et netus. Tristique senectus et netus et malesuada fames ac turpis. Cras pulvinar mattis nunc sed blandit libero. Molestie nunc non blandit massa enim nec. Gravida neque convallis a cras semper. Feugiat scelerisque varius morbi enim.


Sodales ut eu sem integer vitae justo. Eu scelerisque felis imperdiet proin fermentum. Eget nulla facilisi etiam dignissim diam quis enim. Tellus mauris a diam maecenas sed enim ut sem. Tincidunt ornare massa eget egestas purus viverra. Mattis nunc sed blandit libero volutpat. Pellentesque dignissim enim sit amet venenatis. Risus commodo viverra maecenas accumsan lacus vel facilisis. Tincidunt nunc pulvinar sapien et. In metus vulputate eu scelerisque felis imperdiet proin. Eget velit aliquet sagittis id consectetur. Odio morbi quis commodo odio aenean sed adipiscing. Et sollicitudin ac orci phasellus egestas tellus rutrum tellus. Eu nisl nunc mi ipsum faucibus vitae.