import { logger } from '../src' import { option } from './' import * as path from 'path' import { Promise as BPromise } from 'bluebird' import { isArray } from '@plastichub/core/primitives' import { convert as cadConvert } from '@plastichub/osr-cad/cad/sw-lib' import { sanitize } from '@plastichub/osr-cad/sw_argv' import { resolve } from '@plastichub/osr-cli-commons/fs' const create_cad_options = (src, output_glob, options) => { const dst = output_glob return { ...options, src, dst, onNode:(data => { options.debug && logger.info(`Converted ${data.src} to ${data.target}`) }) } } const convert = async (src, options, output) => { const args = create_cad_options(src, output, options); const syncArgs = sanitize({ ...args, ...options }) return cadConvert(syncArgs) } const convertFiles = async (items, options, output) => { return BPromise.resolve(items).map((s) => { return convert(s, options, output) }, { concurrency: 1 }) } export const register = (grunt) => { grunt.registerMultiTask('cad', 'converts CAD files', function () { const done = this.async() const task_options = this.data.options || {} const options = { ...this.data.options, root: option('root', task_options, grunt, path.resolve('./')), debug: option('debug', task_options, grunt), verbose: option('verbose', task_options, grunt), sw: option('sw', task_options, grunt), args: option('args', task_options, grunt), dry: option('dry', task_options, grunt), onNode: option('onNode', task_options, grunt), skip: option('skip', task_options, grunt), report: option('report', task_options, grunt), configuration: option('configuration', task_options, grunt), hidden: option('hidden', task_options, grunt), quality: option('quality', task_options, grunt), renderer: option('renderer', task_options, grunt), view: option('view', 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('Compile - task data ', process.cwd(), this.data, src) try{ convertFiles(src, options, this.data.output).then(done) }catch(e){ logger.error('Error converting files',e) } }) }