ezylean/webp

View on GitHub
src/postinstall/index.ts

Summary

Maintainability
A
1 hr
Test Coverage
// tslint:disable: no-console
import { mkdir } from 'fs';
// @ts-ignore
import request from 'request';
// @ts-ignore
import { extract as tarExtract } from 'tar';
// @ts-ignore
import { Extract as zipExtract } from 'unzipper';
import { createGunzip } from 'zlib';
import { config, LIB_PATH, platforms } from '../lib/utils';
// needed to cpoy into build
import './package.json';

mkdir(LIB_PATH, e => {
  if (e) {
    console.error(e);
  } else {
    const downloadUrls = platforms.reduce(
      (result, plateform) => {
        if (plateform.substr(0, 7) === 'windows') {
          result.zip.push(
            `${config.libwebp.repo}/libwebp-${config.libwebp.version}-${plateform}.zip`
          );
        } else {
          result.tar.push(
            `${config.libwebp.repo}/libwebp-${config.libwebp.version}-${plateform}.tar.gz`
          );
        }
        return result;
      },
      { tar: [], zip: [] }
    );

    console.log(`downloading libwebp version ${config.libwebp.version}`);

    let downloads = downloadUrls.zip.map(url => {
      return {
        stream: request(url).pipe(zipExtract({ path: LIB_PATH })),
        url
      };
    });

    downloads = downloads.concat(
      downloadUrls.tar.map(url => {
        return {
          stream: request(url)
            .pipe(createGunzip())
            .pipe(tarExtract({ cwd: LIB_PATH })),
          url
        };
      })
    );

    let remaings = platforms.length;

    downloads.map(({ url, stream }) => {
      stream.on('error', err => {
        console.error(`error while downloading: ${url}: ${err.message}`);
      });

      stream.on('close', () => {
        console.log(`${url} done`);
        remaings--;
        if (remaings === 0) {
          console.log('done');
        }
      });
    });
  }
});