development-tool
Advanced tools
Comparing version 0.0.2 to 0.1.0
@@ -35,3 +35,3 @@ /// <reference types="gulp" /> | ||
export interface LoaderOption { | ||
type: string; | ||
type?: string; | ||
module?: string; | ||
@@ -51,6 +51,7 @@ configModule?: string; | ||
loader: LoaderOption; | ||
src: string; | ||
dist: string; | ||
src?: string; | ||
dist?: string; | ||
externalTask?: Task; | ||
runTasks?: Src[] | ((oper: Operation, tasks: Src[]) => Src[]); | ||
tasks?: TaskOption | TaskOption[]; | ||
} | ||
@@ -62,2 +63,3 @@ export interface ITaskDefine { | ||
export interface TaskConfig { | ||
globals?: any; | ||
env: EnvOption; | ||
@@ -64,0 +66,0 @@ oper: Operation; |
/// <reference types="gulp" /> | ||
import { Gulp, TaskCallback } from 'gulp'; | ||
import { Gulp } from 'gulp'; | ||
import { ITaskLoader } from './ITaskLoader'; | ||
@@ -14,8 +14,10 @@ import { Src, Task, TaskOption, EnvOption, TaskConfig } from './TaskConfig'; | ||
protected option: DevelopConfig; | ||
private globals; | ||
static create(gulp: Gulp, dirname: string, option?: DevelopConfig): Development; | ||
private constructor(dirname, option); | ||
run(gulp: Gulp, env: EnvOption, callback: TaskCallback): Promise<any>; | ||
run(gulp: Gulp, env: EnvOption): Promise<any>; | ||
private bindingConfig(cfg); | ||
runSequence(gulp: Gulp, tasks: Src[]): Promise<any>; | ||
protected toSquence(tasks: Array<Src | void>): Src[]; | ||
protected loadTasks(gulp: Gulp, tasks: TaskOption | TaskOption[], env: EnvOption): Promise<Src[]>; | ||
protected setup(gulp: Gulp, config: TaskConfig, tasks: Task[]): Promise<Src[]>; | ||
@@ -22,0 +24,0 @@ protected createLoader(option: TaskOption): ITaskLoader; |
106
lib/tools.js
@@ -18,2 +18,3 @@ "use strict"; | ||
this.option = option; | ||
this.globals = {}; | ||
} | ||
@@ -27,3 +28,3 @@ static create(gulp, dirname, option) { | ||
}); | ||
return devtool.run(gulp, options, callback); | ||
return devtool.run(gulp, options); | ||
}); | ||
@@ -33,8 +34,33 @@ gulp.task('default', ['build']); | ||
} | ||
run(gulp, env, callback) { | ||
run(gulp, env) { | ||
if (!env.root) { | ||
env.root = this.dirname; | ||
} | ||
return Promise.all(_.map(_.isArray(this.option.tasks) ? this.option.tasks : [this.option.tasks], optask => { | ||
console.log(chalk.grey('begin load task via loader type:'), chalk.cyan(optask.loader.type)); | ||
if (env.help) { | ||
console.log(chalk.grey('\n... main help ...\n')); | ||
this.printHelp(env.help); | ||
} | ||
return this.loadTasks(gulp, this.option.tasks, env) | ||
.then(tseq => { | ||
return this.runSequence(gulp, tseq); | ||
}) | ||
.catch(err => { | ||
console.error(err); | ||
}); | ||
} | ||
bindingConfig(cfg) { | ||
cfg.globals = this.globals; | ||
cfg.fileFilter = cfg.fileFilter || files; | ||
cfg.runSequence = cfg.runSequence || runSequence; | ||
return cfg; | ||
} | ||
runSequence(gulp, tasks) { | ||
return runSequence(gulp, tasks); | ||
} | ||
toSquence(tasks) { | ||
return _.filter(tasks, t => !!t); | ||
} | ||
loadTasks(gulp, tasks, env) { | ||
return Promise.all(_.map(_.isArray(tasks) ? tasks : [tasks], optask => { | ||
console.log(chalk.grey('begin load task via loader type:'), chalk.cyan(optask.loader.type || 'module')); | ||
let loader = this.createLoader(optask); | ||
@@ -65,7 +91,3 @@ let oper; | ||
} | ||
else { | ||
console.log(chalk.grey('\n... help ...\n')); | ||
this.printHelp(cfg.env.help); | ||
} | ||
return null; | ||
return []; | ||
} | ||
@@ -77,21 +99,37 @@ else { | ||
return this.setup(gulp, cfg, tasks); | ||
}) | ||
.then(tsq => { | ||
if (optask.tasks) { | ||
_.each(_.isArray(optask.tasks) ? optask.tasks : [optask.tasks], subopt => { | ||
subopt.src = subopt.src || optask.src; | ||
subopt.dist = subopt.dist || optask.dist; | ||
}); | ||
return this.loadTasks(gulp, optask.tasks, env) | ||
.then(subseq => { | ||
if (subseq && subseq.length > 0) { | ||
let first = _.first(subseq); | ||
let last = _.last(subseq); | ||
let frn = _.isArray(first) ? _.first(first) : first; | ||
let lsn = _.isArray(last) ? _.first(last) : last; | ||
let subName = frn + '_' + lsn; | ||
gulp.task(subName, () => { | ||
return runSequence(gulp, subseq); | ||
}); | ||
return tsq.push(subName); | ||
} | ||
else { | ||
return tsq; | ||
} | ||
}); | ||
} | ||
else { | ||
return tsq; | ||
} | ||
}); | ||
} | ||
}) | ||
.then(tasksq => { | ||
return this.runSequence(gulp, tasksq); | ||
}); | ||
})); | ||
})).then(tsq => { | ||
return _.flatten(tsq); | ||
}); | ||
} | ||
bindingConfig(cfg) { | ||
cfg.fileFilter = cfg.fileFilter || files; | ||
cfg.runSequence = cfg.runSequence || runSequence; | ||
return cfg; | ||
} | ||
runSequence(gulp, tasks) { | ||
return runSequence(gulp, tasks); | ||
} | ||
toSquence(tasks) { | ||
return _.filter(tasks, t => !!t); | ||
} | ||
setup(gulp, config, tasks) { | ||
@@ -176,3 +214,3 @@ return Promise.all(_.map(tasks, t => { | ||
ps = ps.then(() => { | ||
let taskErr = null, taskStop = null; | ||
let taskErr = null, taskStop = null, len = _.isArray(task) ? (task.length - 1) : 0; | ||
return new Promise((reslove, reject) => { | ||
@@ -182,10 +220,14 @@ taskErr = (err) => { | ||
}; | ||
taskStop = () => { | ||
reslove(); | ||
taskStop = (e) => { | ||
if (len <= 0) { | ||
reslove(); | ||
} | ||
else { | ||
if (task.indexOf(e.task) >= 0) { | ||
len--; | ||
} | ||
} | ||
}; | ||
gulp.on('task_stop', () => { | ||
reslove(); | ||
}).on('task_err', (err) => { | ||
reject(err); | ||
}); | ||
gulp.on('task_stop', taskStop) | ||
.on('task_err', taskErr); | ||
gulp.start(task, (err) => { | ||
@@ -192,0 +234,0 @@ if (err) { |
{ | ||
"name": "development-tool", | ||
"version": "0.0.2", | ||
"version": "0.1.0", | ||
"description": "development build tools.", | ||
@@ -5,0 +5,0 @@ "main": "./lib/tools.js", |
@@ -113,3 +113,3 @@ import { Gulp } from 'gulp'; | ||
/** | ||
* loader type. | ||
* loader type, default module. | ||
* | ||
@@ -119,3 +119,3 @@ * @type {string} | ||
*/ | ||
type: string; | ||
type?: string; | ||
/** | ||
@@ -222,7 +222,7 @@ * module name or url | ||
*/ | ||
src: string; | ||
src?: string; | ||
/** | ||
* build folder. default 'dist'. | ||
*/ | ||
dist: string; | ||
dist?: string; | ||
@@ -242,2 +242,10 @@ /** | ||
runTasks?: Src[] | ((oper: Operation, tasks: Src[]) => Src[]); | ||
/** | ||
* sub tasks. | ||
* | ||
* @type {(TaskOption | TaskOption[])} | ||
* @memberOf TaskOption | ||
*/ | ||
tasks?: TaskOption | TaskOption[]; | ||
} | ||
@@ -289,2 +297,6 @@ | ||
/** | ||
* custom global data cache. | ||
*/ | ||
globals?: any; | ||
/** | ||
* env | ||
@@ -291,0 +303,0 @@ * |
140
src/tools.ts
@@ -18,2 +18,10 @@ import * as _ from 'lodash'; | ||
export class Development { | ||
/** | ||
* global data. | ||
* | ||
* @private | ||
* @type {*} | ||
* @memberOf Development | ||
*/ | ||
private globals: any = {}; | ||
static create(gulp: Gulp, dirname: string, option?: DevelopConfig): Development { | ||
@@ -26,3 +34,3 @@ let devtool = new Development(dirname, option); | ||
}); | ||
return devtool.run(gulp, options, callback); | ||
return devtool.run(gulp, options); | ||
}); | ||
@@ -38,9 +46,50 @@ | ||
run(gulp: Gulp, env: EnvOption, callback: TaskCallback): Promise<any> { | ||
run(gulp: Gulp, env: EnvOption): Promise<any> { | ||
if (!env.root) { | ||
env.root = this.dirname; | ||
} | ||
return Promise.all( | ||
_.map(_.isArray(this.option.tasks) ? <TaskOption[]>this.option.tasks : [<TaskOption>this.option.tasks], optask => { | ||
console.log(chalk.grey('begin load task via loader type:'), chalk.cyan(optask.loader.type)); | ||
if (env.help) { | ||
console.log(chalk.grey('\n... main help ...\n')); | ||
this.printHelp(env.help); | ||
} | ||
return this.loadTasks(gulp, this.option.tasks, env) | ||
.then(tseq => { | ||
return this.runSequence(gulp, tseq); | ||
}) | ||
.catch(err => { | ||
console.error(err); | ||
}); | ||
} | ||
private bindingConfig(cfg: TaskConfig): TaskConfig { | ||
cfg.globals = this.globals; | ||
cfg.fileFilter = cfg.fileFilter || files; | ||
cfg.runSequence = cfg.runSequence || runSequence; | ||
return cfg; | ||
} | ||
/** | ||
* run task sequence. | ||
* | ||
* @protected | ||
* @param {Gulp} gulp | ||
* @param {Src[]} tasks | ||
* @returns {Promise<any>} | ||
* | ||
* @memberOf Development | ||
*/ | ||
runSequence(gulp: Gulp, tasks: Src[]): Promise<any> { | ||
return runSequence(gulp, tasks); | ||
} | ||
protected toSquence(tasks: Array<Src | void>): Src[] { | ||
return <Src[]>_.filter(tasks, t => !!t); | ||
} | ||
protected loadTasks(gulp: Gulp, tasks: TaskOption | TaskOption[], env: EnvOption): Promise<Src[]> { | ||
return Promise.all<Src[]>( | ||
_.map(_.isArray(tasks) ? <TaskOption[]>tasks : [<TaskOption>tasks], optask => { | ||
console.log(chalk.grey('begin load task via loader type:'), chalk.cyan(optask.loader.type || 'module')); | ||
let loader = this.createLoader(optask); | ||
@@ -67,7 +116,4 @@ let oper: Operation; | ||
cfg.printHelp(_.isString(cfg.env.help) ? cfg.env.help : ''); | ||
} else { | ||
console.log(chalk.grey('\n... help ...\n')); | ||
this.printHelp(cfg.env.help); | ||
} | ||
return null; | ||
return []; | ||
} else { | ||
@@ -79,35 +125,36 @@ // console.log(chalk.grey('load tasks...')); | ||
return this.setup(gulp, cfg, tasks) | ||
}) | ||
.then(tsq => { | ||
if (optask.tasks) { | ||
_.each(_.isArray(optask.tasks) ? optask.tasks : [optask.tasks], subopt => { | ||
subopt.src = subopt.src || optask.src; | ||
subopt.dist = subopt.dist || optask.dist; | ||
}); | ||
return this.loadTasks(gulp, optask.tasks, env) | ||
.then(subseq => { | ||
if (subseq && subseq.length > 0) { | ||
let first = _.first(subseq); | ||
let last = _.last(subseq); | ||
let frn = _.isArray(first) ? _.first(first) : first; | ||
let lsn = _.isArray(last) ? _.first(last) : last; | ||
let subName = frn + '_' + lsn; | ||
gulp.task(subName, () => { | ||
return runSequence(gulp, subseq); | ||
}) | ||
return tsq.push(subName); | ||
} else { | ||
return tsq; | ||
} | ||
}); | ||
} else { | ||
return tsq; | ||
} | ||
}); | ||
} | ||
}) | ||
.then(tasksq => { | ||
return this.runSequence(gulp, tasksq); | ||
}); | ||
})); | ||
})).then(tsq => { | ||
return _.flatten(tsq); | ||
}); | ||
} | ||
private bindingConfig(cfg: TaskConfig): TaskConfig { | ||
cfg.fileFilter = cfg.fileFilter || files; | ||
cfg.runSequence = cfg.runSequence || runSequence; | ||
return cfg; | ||
} | ||
/** | ||
* run task sequence. | ||
* | ||
* @protected | ||
* @param {Gulp} gulp | ||
* @param {Src[]} tasks | ||
* @returns {Promise<any>} | ||
* | ||
* @memberOf Development | ||
*/ | ||
runSequence(gulp: Gulp, tasks: Src[]): Promise<any> { | ||
return runSequence(gulp, tasks); | ||
} | ||
protected toSquence(tasks: Array<Src | void>): Src[] { | ||
return <Src[]>_.filter(tasks, t => !!t); | ||
} | ||
protected setup(gulp: Gulp, config: TaskConfig, tasks: Task[]): Promise<Src[]> { | ||
@@ -208,3 +255,3 @@ return Promise.all(_.map(tasks, t => { | ||
ps = ps.then(() => { | ||
let taskErr = null, taskStop = null; | ||
let taskErr = null, taskStop = null, len = _.isArray(task) ? (task.length - 1) : 0; | ||
return new Promise((reslove, reject) => { | ||
@@ -214,10 +261,13 @@ taskErr = (err) => { | ||
}; | ||
taskStop = () => { | ||
reslove(); | ||
taskStop = (e: any) => { | ||
if (len <= 0) { | ||
reslove(); | ||
} else { | ||
if ((<string[]>task).indexOf(e.task) >= 0) { | ||
len--; | ||
} | ||
} | ||
} | ||
gulp.on('task_stop', () => { | ||
reslove(); | ||
}).on('task_err', (err) => { | ||
reject(err); | ||
}); | ||
gulp.on('task_stop', taskStop) | ||
.on('task_err', taskErr); | ||
@@ -224,0 +274,0 @@ gulp.start(task, (err) => { |
59486
1712