osr-mono/packages/osr-tasks/tasks/images.ts
2025-01-29 17:48:22 +01:00

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)
})
}