import { Promise as BPromise } from 'bluebird' import { isArray } from '@plastichub/core/primitives' import { resolve } from '@plastichub/osr-cli-commons/fs' import { IOptions as IResizeOptions } from '@plastichub/osr-media/types' import { sanitize } from '@plastichub/osr-media/_cli' import { resize } from '@plastichub/osr-media/lib/media/images' import { logger } from '../src' import { option } from './' const convert = async (src, dst, options) => { const resizeOptions = sanitize( { src: src, dst: dst, debug: options.debug, verbose: options.verbose, dry: options.dry } ) as IResizeOptions return await resize(resizeOptions) } const resizeFiles = async (items, dst, options) => { return BPromise.resolve(items).map((s) => { return convert(s, options, dst) }, { concurrency: 1 }) } export const register = (grunt) => { grunt.registerMultiTask('images-resize', 'resizes images', function () { const done = this.async() const task_options = this.data.options || {} const options = { ...this.data.options, debug: option('debug', task_options, grunt), verbose: option('verbose', task_options, grunt), dry: option('dry', task_options, grunt) } let src: string[] = isArray(this.data.src) ? this.data.src : [this.data.src] src = src.map(f => (resolve(f))) options.debug && logger.info('Images-Resize : Task data ', process.cwd(), this.data, src) resizeFiles(src, options, this.data.dst).then(done) }) }