56 lines
1.6 KiB
TypeScript
56 lines
1.6 KiB
TypeScript
import { Promise as BPromise } from 'bluebird'
|
|
import { isArray } from '@plastichub/core/primitives'
|
|
import { resolve } from '@plastichub/osr-commons'
|
|
|
|
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 '../library'
|
|
|
|
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)
|
|
})
|
|
}
|