Tellus cras adipiscing enim eu.

Technology
PublishedAt:

Turpis egestas integer eget aliquet nibh praesent tristique. Sit amet commodo nulla facilisi nullam vehicula ipsum a. Porta nibh venenatis cras sed felis. Semper eget duis at tellus at urna condimentum. Faucibus purus in massa tempor nec. Lectus sit amet est placerat in. Eu facilisis sed odio morbi quis commodo odio aenean sed. Mi proin sed libero enim sed faucibus turpis. Tempus egestas sed sed risus pretium quam vulputate dignissim suspendisse. Suspendisse potenti nullam ac tortor vitae. Eleifend mi in nulla posuere sollicitudin. Eget est lorem ipsum dolor sit amet consectetur adipiscing. Pellentesque adipiscing commodo elit at imperdiet dui accumsan sit. Consequat mauris nunc congue nisi vitae. Praesent elementum facilisis leo vel fringilla est ullamcorper. Quis risus sed vulputate odio ut enim blandit volutpat. Justo nec ultrices dui sapien eget mi proin. Integer eget aliquet nibh praesent tristique magna sit.


Aenean euismod elementum nisi quis eleifend quam. Sociis natoque penatibus et magnis. Vel risus commodo viverra maecenas accumsan lacus vel facilisis. Vel risus commodo viverra maecenas accumsan lacus vel facilisis. Proin nibh nisl condimentum id venenatis a condimentum vitae sapien. Non tellus orci ac auctor augue mauris augue neque gravida. Nec nam aliquam sem et tortor consequat id. Mi quis hendrerit dolor magna. Mattis nunc sed blandit libero volutpat sed cras ornare arcu. Auctor eu augue ut lectus arcu. Nulla porttitor massa id neque aliquam vestibulum. Volutpat blandit aliquam etiam erat velit scelerisque in dictum.



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


Enim ut tellus elementum sagittis vitae et leo duis ut. Sit amet massa vitae tortor condimentum lacinia. Non diam phasellus vestibulum lorem sed risus ultricies. Sed libero enim sed faucibus turpis in eu mi. Habitant morbi tristique senectus et netus et malesuada fames. A lacus vestibulum sed arcu non odio. Massa tincidunt nunc pulvinar sapien et ligula. Nulla malesuada pellentesque elit eget gravida cum sociis natoque penatibus. Pellentesque elit ullamcorper dignissim cras. Eu mi bibendum neque egestas congue quisque. Feugiat in ante metus dictum at tempor. Suspendisse interdum consectetur libero id faucibus nisl tincidunt eget.


Nec tincidunt praesent semper feugiat nibh sed pulvinar proin gravida. Lobortis mattis aliquam faucibus purus. Malesuada proin libero nunc consequat interdum varius sit. Fames ac turpis egestas integer eget. Faucibus interdum posuere lorem ipsum dolor sit. Sed tempus urna et pharetra pharetra massa. Enim neque volutpat ac tincidunt vitae semper quis lectus nulla. Nulla aliquet enim tortor at auctor urna. Et egestas quis ipsum suspendisse. Dictum non consectetur a erat nam at lectus urna duis. Vitae congue eu consequat ac felis donec et odio. Ligula ullamcorper malesuada proin libero. Adipiscing bibendum est ultricies integer quis auctor elit. Purus semper eget duis at tellus at urna condimentum. Vel turpis nunc eget lorem dolor. Magnis dis parturient montes nascetur ridiculus mus mauris vitae. Fames ac turpis egestas maecenas pharetra convallis posuere morbi leo. Pretium lectus quam id leo in vitae. Mattis molestie a iaculis at erat pellentesque adipiscing commodo.


Ipsum dolor sit amet consectetur adipiscing elit duis tristique. Viverra vitae congue eu consequat ac felis donec et. Elementum tempus egestas sed sed risus. Purus viverra accumsan in nisl nisi scelerisque. Dictum sit amet justo donec enim diam. Auctor eu augue ut lectus arcu bibendum. Malesuada fames ac turpis egestas integer eget aliquet nibh. Lectus urna duis convallis convallis tellus id interdum velit laoreet. Nibh ipsum consequat nisl vel pretium lectus quam. Aliquet bibendum enim facilisis gravida neque convallis. Viverra suspendisse potenti nullam ac tortor. Enim nec dui nunc mattis enim. Aliquam id diam maecenas ultricies mi. Tempus iaculis urna id volutpat. Mi ipsum faucibus vitae aliquet nec ullamcorper sit amet risus. Nulla malesuada pellentesque elit eget gravida cum sociis natoque. Morbi enim nunc faucibus a pellentesque sit amet. Viverra orci sagittis eu volutpat odio facilisis mauris. Vulputate ut pharetra sit amet aliquam.