Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Tutorial
PublishedAt:

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Orci sagittis eu volutpat odio. At auctor urna nunc id cursus metus aliquam. Massa id neque aliquam vestibulum. Gravida arcu ac tortor dignissim convallis aenean et tortor. Sagittis nisl rhoncus mattis rhoncus urna. Parturient montes nascetur ridiculus mus mauris vitae. Ut etiam sit amet nisl purus in mollis. Amet consectetur adipiscing elit duis tristique sollicitudin nibh sit. Amet commodo nulla facilisi nullam vehicula. Pellentesque id nibh tortor id aliquet lectus proin nibh. At risus viverra adipiscing at in tellus integer. Interdum consectetur libero id faucibus. Id donec ultrices tincidunt arcu non sodales neque sodales. Vitae semper quis lectus nulla at volutpat diam ut. Placerat vestibulum lectus mauris ultrices eros in cursus turpis. Ut lectus arcu bibendum at varius vel pharetra. Pellentesque habitant morbi tristique senectus et netus et. Volutpat maecenas volutpat blandit aliquam etiam erat velit scelerisque.


Dictum non consectetur a erat nam at lectus urna. Purus ut faucibus pulvinar elementum integer. Nisi lacus sed viverra tellus in hac habitasse platea dictumst. Sodales neque sodales ut etiam sit amet nisl. Hac habitasse platea dictumst quisque sagittis. Tellus pellentesque eu tincidunt tortor aliquam. Morbi tincidunt augue interdum velit euismod in pellentesque massa placerat. Scelerisque eleifend donec pretium vulputate. Ullamcorper sit amet risus nullam eget. Mi eget mauris pharetra et ultrices neque. Ac orci phasellus egestas tellus rutrum tellus pellentesque. Mauris ultrices eros in cursus turpis massa tincidunt. Accumsan tortor posuere ac ut consequat semper. Vitae auctor eu augue ut lectus arcu bibendum at. Nunc non blandit massa enim nec dui nunc mattis enim. Libero id faucibus nisl tincidunt. Volutpat maecenas volutpat blandit aliquam etiam.


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


Velit egestas dui id ornare arcu odio ut. Natoque penatibus et magnis dis parturient. Vulputate sapien nec sagittis aliquam malesuada. Suscipit tellus mauris a diam maecenas. Feugiat in ante metus dictum at tempor commodo ullamcorper. Donec massa sapien faucibus et. Sagittis nisl rhoncus mattis rhoncus urna neque viverra justo. Sit amet mauris commodo quis imperdiet massa. Vulputate dignissim suspendisse in est ante. Et malesuada fames ac turpis egestas maecenas pharetra convallis. Dapibus ultrices in iaculis nunc sed.


Viverra suspendisse potenti nullam ac tortor. Dui sapien eget mi proin. Amet consectetur adipiscing elit duis. Sit amet est placerat in egestas erat imperdiet. Volutpat consequat mauris nunc congue nisi. Euismod lacinia at quis risus sed vulputate. Enim nec dui nunc mattis enim. Libero nunc consequat interdum varius sit amet mattis vulputate. Lorem donec massa sapien faucibus et. Sapien nec sagittis aliquam malesuada bibendum. Massa tincidunt dui ut ornare lectus sit amet est placerat. Ac tortor vitae purus faucibus ornare suspendisse sed nisi lacus. At quis risus sed vulputate. Lacus suspendisse faucibus interdum posuere lorem ipsum. Amet nisl purus in mollis nunc sed id.


Fringilla ut morbi tincidunt augue. Libero enim sed faucibus turpis in. Nisi porta lorem mollis aliquam. Tincidunt ornare massa eget egestas purus. Egestas purus viverra accumsan in. Tellus integer feugiat scelerisque varius morbi enim nunc. Erat velit scelerisque in dictum non consectetur. Neque laoreet suspendisse interdum consectetur libero id faucibus nisl tincidunt. Sit amet facilisis magna etiam tempor orci eu. Sem fringilla ut morbi tincidunt augue interdum velit euismod in.