development-tool
Advanced tools
Comparing version 0.3.2 to 0.4.0
@@ -15,17 +15,8 @@ /// <reference types="gulp" /> | ||
export declare type Src = string | string[]; | ||
export declare type Task = (gulp: Gulp, config: TaskConfig) => Src | void; | ||
export interface EnvOption { | ||
root?: string; | ||
help?: boolean | string; | ||
test?: boolean | string; | ||
serve?: boolean | string; | ||
e2e?: boolean | string; | ||
release?: boolean; | ||
deploy?: boolean; | ||
watch?: boolean | string; | ||
task?: string; | ||
config?: string; | ||
publish?: boolean | string; | ||
grp?: Src; | ||
export interface ITaskResult { | ||
name?: string; | ||
oper?: Operation; | ||
} | ||
export declare type TaskResult = string | ITaskResult; | ||
export declare type Task = (gulp: Gulp, config: TaskConfig) => TaskResult | TaskResult[] | void; | ||
export interface LoaderOption { | ||
@@ -66,4 +57,3 @@ type?: string; | ||
} | ||
export interface Asserts { | ||
src: Src; | ||
export interface OutputDist { | ||
dist?: string; | ||
@@ -76,8 +66,16 @@ build?: string; | ||
} | ||
export interface TaskOption extends Asserts { | ||
export interface TaskLoaderOption { | ||
loader: string | LoaderOption | DynamicTask | DynamicTask[]; | ||
externalTask?: Task; | ||
runTasks?: Src[] | ((oper: Operation, tasks: Src[], subGroupTask?: Src) => Src[]); | ||
runTasks?: Src[] | ((oper: Operation, tasks: Src[], subGroupTask?: Src, assertsTask?: Src) => Src[]); | ||
tasks?: TaskOption | TaskOption[]; | ||
} | ||
export interface Asserts extends OutputDist, TaskLoaderOption { | ||
name?: string; | ||
src?: Src; | ||
asserts?: IMap<Src | Asserts>; | ||
} | ||
export interface TaskOption extends Asserts { | ||
src: Src; | ||
} | ||
export interface ITaskDefine { | ||
@@ -92,3 +90,3 @@ moduleTaskConfig(oper: Operation, option: TaskOption, env: EnvOption): TaskConfig; | ||
option: TaskOption; | ||
runTasks?(subGroupTask?: Src, tasks?: Src[]): Src[]; | ||
runTasks?(subGroupTask?: Src, tasks?: Src[], assertTasks?: Src): Src[]; | ||
printHelp?(lang: string): void; | ||
@@ -102,1 +100,15 @@ findTasksInModule?(module: string): Promise<Task[]>; | ||
} | ||
export interface EnvOption { | ||
root?: string; | ||
help?: boolean | string; | ||
test?: boolean | string; | ||
serve?: boolean | string; | ||
e2e?: boolean | string; | ||
release?: boolean; | ||
deploy?: boolean; | ||
watch?: boolean | string; | ||
task?: string; | ||
config?: string; | ||
publish?: boolean | string; | ||
grp?: Src; | ||
} |
/// <reference types="gulp" /> | ||
import { Gulp } from 'gulp'; | ||
import { ITaskLoader } from './ITaskLoader'; | ||
import { Src, Task, TaskOption, Operation, EnvOption, DynamicTask, TaskConfig } from './TaskConfig'; | ||
import { Src, Asserts, Task, TaskOption, Operation, EnvOption, DynamicTask, TaskResult, TaskConfig } from './TaskConfig'; | ||
import { DevelopConfig } from './DevelopConfig'; | ||
@@ -20,6 +20,7 @@ export * from './DevelopConfig'; | ||
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[], subGroupTask: Src): Promise<Src[]>; | ||
protected toSquence(tasks: Array<TaskResult | TaskResult[] | void>, oper: Operation): Src[]; | ||
protected loadTasks(gulp: Gulp, tasks: Asserts | Asserts[], env: EnvOption): Promise<Src[]>; | ||
protected setup(gulp: Gulp, config: TaskConfig, tasks: Task[], assertsTask: Src, subGroupTask: Src): Promise<Src[]>; | ||
protected loadSubTask(gulp: Gulp, config: TaskConfig): Promise<Src>; | ||
protected loadAssertTasks(gulp: Gulp, config: TaskConfig): Promise<Src>; | ||
protected createLoader(option: TaskOption): ITaskLoader; | ||
@@ -26,0 +27,0 @@ protected printHelp(help: boolean | string): void; |
121
lib/tools.js
@@ -88,4 +88,23 @@ "use strict"; | ||
} | ||
toSquence(tasks) { | ||
return _.filter(tasks, t => !!t); | ||
toSquence(tasks, oper) { | ||
let seq = []; | ||
_.each(tasks, t => { | ||
if (!t) { | ||
return; | ||
} | ||
if (_.isString(t)) { | ||
seq.push(t); | ||
} | ||
else if (_.isArray(t)) { | ||
seq.push(_.flatten(this.toSquence(t, oper))); | ||
} | ||
else { | ||
if (t.name) { | ||
if (t.oper && ((t.oper & oper) > 0)) { | ||
seq.push(t.name); | ||
} | ||
} | ||
} | ||
}); | ||
return seq; | ||
} | ||
@@ -95,4 +114,2 @@ loadTasks(gulp, tasks, env) { | ||
optask.dist = optask.dist || 'dist'; | ||
console.log(chalk.grey('begin load task via loader:'), optask.loader); | ||
let loader = this.createLoader(optask); | ||
let oper; | ||
@@ -114,2 +131,4 @@ if (env.deploy) { | ||
} | ||
console.log(chalk.grey('begin load task via loader:'), optask.loader); | ||
let loader = this.createLoader(optask); | ||
return loader.loadConfg(oper, env) | ||
@@ -129,6 +148,9 @@ .then(cfg => { | ||
.then(subtask => { | ||
return loader.load(cfg) | ||
return Promise.all([ | ||
loader.load(cfg), | ||
this.loadAssertTasks(gulp, cfg) | ||
]) | ||
.then(tasks => { | ||
console.log(chalk.green('tasks loaded.')); | ||
return this.setup(gulp, cfg, tasks, subtask); | ||
return this.setup(gulp, cfg, tasks[0], tasks[1], subtask); | ||
}); | ||
@@ -142,3 +164,3 @@ }); | ||
} | ||
setup(gulp, config, tasks, subGroupTask) { | ||
setup(gulp, config, tasks, assertsTask, subGroupTask) { | ||
return Promise.all(_.map(tasks, t => { | ||
@@ -148,20 +170,15 @@ return t(gulp, config); | ||
.then(ts => { | ||
let tsqs = this.toSquence(ts); | ||
if (config.option.runTasks) { | ||
if (_.isFunction(config.option.runTasks)) { | ||
tsqs = config.option.runTasks(config.oper, tsqs, subGroupTask); | ||
} | ||
else { | ||
tsqs = config.option.runTasks; | ||
subGroupTask && tsqs.push(subGroupTask); | ||
} | ||
return tsqs; | ||
let tsqs = this.toSquence(ts, config.oper); | ||
if (_.isFunction(config.option.runTasks)) { | ||
return config.option.runTasks(config.oper, tsqs, subGroupTask, assertsTask); | ||
} | ||
else if (_.isArray(config.option.runTasks)) { | ||
tsqs = config.option.runTasks; | ||
} | ||
else if (config.runTasks) { | ||
return config.runTasks(subGroupTask, tsqs); | ||
return config.runTasks(subGroupTask, tsqs, assertsTask); | ||
} | ||
else { | ||
subGroupTask && tsqs.push(subGroupTask); | ||
return tsqs; | ||
} | ||
assertsTask && tsqs.splice(0, 0, assertsTask); | ||
subGroupTask && tsqs.splice(0, 0, subGroupTask); | ||
return tsqs; | ||
}); | ||
@@ -183,3 +200,3 @@ } | ||
let lsn = _.isArray(last) ? _.last(last) : last; | ||
let subName = frn + '_' + lsn; | ||
let subName = `${config.option.name ? config.option.name + '_' : ''}${frn}_${lsn}`; | ||
gulp.task(subName, () => { | ||
@@ -199,2 +216,46 @@ return runSequence(gulp, subseq); | ||
} | ||
loadAssertTasks(gulp, config) { | ||
let optask = config.option; | ||
if (optask.asserts) { | ||
let tasks = _.map(_.keys(optask.asserts), name => { | ||
let op; | ||
let aop = optask.asserts[name]; | ||
if (_.isString(aop) || _.isArray(aop)) { | ||
op = { src: aop, loader: [{ name: name, pipes: [] }, { name: `${name}-watch`, watch: [name] }] }; | ||
} | ||
else { | ||
op = aop; | ||
} | ||
; | ||
optask.name = name; | ||
op.src = op.src || (optask.src + '/**/*.' + name); | ||
op.dist = op.dist || optask.dist; | ||
return op; | ||
}); | ||
return Promise.all(_.map(tasks, task => { | ||
return this.loadTasks(gulp, task, config.env) | ||
.then(sq => { | ||
return { | ||
task: task, | ||
sq: sq | ||
}; | ||
}); | ||
})) | ||
.then(tseq => { | ||
return _.map(tseq, t => { | ||
let subseq = t.sq; | ||
if (subseq && subseq.length > 0) { | ||
gulp.task(t.task.name, () => { | ||
return runSequence(gulp, subseq); | ||
}); | ||
return t.task.name; | ||
} | ||
return t.sq; | ||
}); | ||
}); | ||
} | ||
else { | ||
return Promise.resolve(null); | ||
} | ||
} | ||
createLoader(option) { | ||
@@ -354,8 +415,4 @@ let loader = null; | ||
stream.pipe(output) | ||
.on('end', () => { | ||
resolve(); | ||
}) | ||
.on('error', (err) => { | ||
reject(err); | ||
}); | ||
.once('end', resolve) | ||
.once('error', reject); | ||
}).catch(err => { | ||
@@ -370,6 +427,4 @@ reject(err); | ||
stream.pipe(gulp.dest(cfg.getDist(cfg.option))) | ||
.on('end', () => { | ||
resolve(); | ||
}) | ||
.on('error', reject); | ||
.once('end', resolve) | ||
.once('error', reject); | ||
}); | ||
@@ -376,0 +431,0 @@ } |
{ | ||
"name": "development-tool", | ||
"version": "0.3.2", | ||
"version": "0.4.0", | ||
"description": "development build tools.", | ||
@@ -5,0 +5,0 @@ "main": "./lib/tools.js", |
@@ -51,4 +51,4 @@ # packaged development-tool | ||
tasks[ | ||
{src: 'src/client', dist: 'public', loader: 'development-tool-web', tasks:[...] }, // any module implement ITaskDefine | ||
{src: 'src/server', dist: 'lib', loader: 'development-tool-node', tasks:[...] } | ||
{src: 'src/client', dist: 'public', loader: 'development-tool-web', asserts:{...}, tasks:[...] }, // any module implement ITaskDefine | ||
{src: 'src/server', dist: 'lib', loader: 'development-tool-node', asserts:{...}, tasks:[...] } | ||
... | ||
@@ -62,7 +62,6 @@ ] | ||
import * as gulp from 'gulp'; | ||
import { Development } from 'development-tool'; | ||
import { NodeBuildOption } from 'development-tool-node'; | ||
import { Development, Asserts, TaskOption } from 'development-tool'; | ||
Development.create(gulp, __dirname, { | ||
tasks:[ | ||
<NodeBuildOption>{ | ||
{ | ||
src: 'src', | ||
@@ -74,12 +73,14 @@ dist: 'lib', | ||
asserts:{ | ||
json: 'src/**/*.json', | ||
css:'src/common/**/*.css', | ||
moduleBcss: ['src/moduleB/**/*.css'], | ||
moduleAcss: { | ||
src: ['src/apath/**/*.css', 'src/bpath/**/*.css'], | ||
dist:'dist path', | ||
build:'build path', | ||
release: 'release path', | ||
depoly: 'depoly path' | ||
}, | ||
//default copy 'src/**/*.json' to dist. auto create json task and json-watch task. | ||
json: '', | ||
//default copy to dist. auto create jpeg task and jpeg-watch task. | ||
jpeg: ['src/apath/**/*.jpeg', 'src/bpath/**/*.jpeg'], | ||
//default copy to dist. auto create moduleBcss task and moduleBcss-watch task. | ||
moduleBcss: 'src/moduleB/**/*.css', | ||
// use Asserts task to deal with ts file, if src not setting, use src/**/*.ts | ||
ts:<Asserts>{...}, | ||
// use default task to deal with ts file, if src must setting. | ||
less:<TaskOption>{...}, | ||
// use dynamic task to deal with html file, if src not setting, use src/**/*.html | ||
html:{loader: <DynamicTask[]>[} | ||
... | ||
@@ -100,3 +101,3 @@ }, | ||
dist: 'lib', | ||
loader: 'development-tool-node', | ||
loader: 'development-tool-web', | ||
tasks:[ | ||
@@ -200,3 +201,3 @@ { | ||
// or with task from module | ||
// or with task from module and asserts. | ||
Development.create(gulp, __dirname, { | ||
@@ -206,2 +207,17 @@ tasks: { | ||
dist: 'lib', | ||
asserts:{ | ||
//default copy 'src/**/*.json' to dist. auto create json task and json-watch task. | ||
json: '', | ||
//default copy to dist. auto create jpeg task and jpeg-watch task. | ||
jpeg: ['src/apath/**/*.jpeg', 'src/bpath/**/*.jpeg'], | ||
//default copy to dist. auto create moduleBcss task and moduleBcss-watch task. | ||
moduleBcss: 'src/moduleB/**/*.css', | ||
// use Asserts task to deal with ts file, if src not setting, use src/**/*.ts | ||
ts:<Asserts>{...}, | ||
// use default task to deal with ts file, if src must setting. | ||
less:<TaskOption>{...}, | ||
// use dynamic task to deal with html file, if src not setting, use src/**/*.html | ||
html:{loader: <DynamicTask[]>[} | ||
... | ||
}, | ||
loader: { | ||
@@ -212,3 +228,3 @@ module:'module name', | ||
name: 'clean', | ||
task: (config) => del(config.option.dist) | ||
task: (config) => del(config.getDist()) | ||
}, | ||
@@ -215,0 +231,0 @@ { |
@@ -48,61 +48,16 @@ import { Gulp, WatchEvent, WatchCallback } from 'gulp'; | ||
export type Task = (gulp: Gulp, config: TaskConfig) => Src | void; | ||
/** | ||
* event option | ||
* Task return type. | ||
* | ||
* @export | ||
* @interface EnvOption | ||
* @interface ITaskResult | ||
*/ | ||
export interface EnvOption { | ||
/** | ||
* project root. | ||
* | ||
* @type {string} | ||
* @memberOf EnvOption | ||
*/ | ||
root?: string; | ||
/** | ||
* help doc | ||
* | ||
* @type {(boolean | string)} | ||
* @memberOf EnvOption | ||
*/ | ||
help?: boolean | string; | ||
test?: boolean | string; | ||
serve?: boolean | string; | ||
e2e?: boolean | string; | ||
release?: boolean; | ||
deploy?: boolean; | ||
watch?: boolean | string; | ||
/** | ||
* run spruce task. | ||
*/ | ||
task?: string; | ||
export interface ITaskResult { | ||
name?: string; | ||
oper?: Operation; | ||
} | ||
/** | ||
* project config setting. | ||
* | ||
* @type {string} | ||
* @memberOf EnvOption | ||
*/ | ||
config?: string; | ||
export type TaskResult = string | ITaskResult; | ||
export type Task = (gulp: Gulp, config: TaskConfig) => TaskResult | TaskResult[] | void; | ||
// key?: number; | ||
// value?: number; | ||
// csv?: string; | ||
// dist?: string; | ||
// lang?: string; | ||
publish?: boolean | string; | ||
/** | ||
* group bundle. | ||
* | ||
* @type {Src} | ||
* @memberOf EnvOption | ||
*/ | ||
grp?: Src; | ||
} | ||
/** | ||
@@ -330,53 +285,40 @@ * task loader option. | ||
/** | ||
* asserts to be dealt with. | ||
* | ||
* @export | ||
* @interface Asserts | ||
*/ | ||
export interface Asserts { | ||
export interface OutputDist { | ||
/** | ||
* the src file filter string. default 'src'. | ||
* | ||
* @type {string} | ||
* @memberOf Asserts | ||
* default output folder. if empty use parent setting, or ues 'dist'. | ||
*/ | ||
src: Src; | ||
/** | ||
* default folder. if empty use parent setting, or ues 'dist'. | ||
*/ | ||
dist?: string; | ||
/** | ||
* build folder. if empty use parent setting, or ues 'dist'. | ||
* build output folder. if empty use parent setting, or ues 'dist'. | ||
* | ||
* @type {string} | ||
* @memberOf Asserts | ||
* @memberOf Dist | ||
*/ | ||
build?: string; | ||
/** | ||
* test folder. if empty use parent setting, or ues 'dist'. | ||
* test output folder. if empty use parent setting, or ues 'dist'. | ||
* | ||
* @type {string} | ||
* @memberOf Asserts | ||
* @memberOf Dist | ||
*/ | ||
test?: string; | ||
/** | ||
* build folder. if empty use parent setting, or ues 'dist'. | ||
* e2e output folder. if empty use parent setting, or ues 'dist'. | ||
* | ||
* @type {string} | ||
* @memberOf Asserts | ||
* @memberOf Dist | ||
*/ | ||
e2e?: string; | ||
/** | ||
* e2e folder. if empty use parent setting, or ues 'dist'. | ||
* release output folder. if empty use parent setting, or ues 'dist'. | ||
* | ||
* @type {string} | ||
* @memberOf Asserts | ||
* @memberOf Dist | ||
*/ | ||
release?: string; | ||
/** | ||
* deploy folder. if empty use parent setting, or ues 'dist'. | ||
* deploy output folder. if empty use parent setting, or ues 'dist'. | ||
* | ||
* @type {string} | ||
* @memberOf Asserts | ||
* @memberOf Dist | ||
*/ | ||
@@ -386,9 +328,4 @@ deploy?: string; | ||
/** | ||
* task option setting. | ||
* | ||
* @export | ||
* @interface TaskOption | ||
*/ | ||
export interface TaskOption extends Asserts { | ||
export interface TaskLoaderOption { | ||
/** | ||
@@ -414,3 +351,3 @@ * task loader | ||
*/ | ||
runTasks?: Src[] | ((oper: Operation, tasks: Src[], subGroupTask?: Src) => Src[]); | ||
runTasks?: Src[] | ((oper: Operation, tasks: Src[], subGroupTask?: Src, assertsTask?: Src) => Src[]); | ||
@@ -426,3 +363,53 @@ /** | ||
/** | ||
* asserts to be dealt with. | ||
* | ||
* @export | ||
* @interface Asserts | ||
*/ | ||
export interface Asserts extends OutputDist, TaskLoaderOption { | ||
/** | ||
* asserts extends name. for register dynamic task. | ||
* | ||
* @type {string} | ||
* @memberOf Asserts | ||
*/ | ||
name?: string; | ||
/** | ||
* the src file filter string. default 'src'. | ||
* | ||
* @type {string} | ||
* @memberOf Asserts | ||
*/ | ||
src?: Src; | ||
/** | ||
* tasks to deal with asserts. | ||
* | ||
* @type {IMap<Src | Asserts>} | ||
* @memberOf Asserts | ||
*/ | ||
asserts?: IMap<Src | Asserts>; | ||
} | ||
/** | ||
* task option setting. | ||
* | ||
* @export | ||
* @interface TaskOption | ||
*/ | ||
export interface TaskOption extends Asserts { | ||
/** | ||
* the src file filter string. default 'src'. | ||
* | ||
* @type {string} | ||
* @memberOf TaskOption | ||
*/ | ||
src: Src; | ||
} | ||
/** | ||
* modules task define | ||
@@ -499,4 +486,5 @@ * | ||
* | ||
* @param {Src} [subGroupTask] sub tasks group tasks. | ||
* @param {Src[]} [tasks] task name sequence from register tasks. | ||
* @param {Src} [subGroupTask] | ||
* @param {Src[]} [tasks] | ||
* @param {Src} [assertTasks] | ||
* @returns {Src[]} | ||
@@ -506,3 +494,3 @@ * | ||
*/ | ||
runTasks?(subGroupTask?: Src, tasks?: Src[]): Src[]; | ||
runTasks?(subGroupTask?: Src, tasks?: Src[], assertTasks?: Src): Src[]; | ||
/** | ||
@@ -576,1 +564,58 @@ * custom print help. | ||
} | ||
/** | ||
* event option | ||
* | ||
* @export | ||
* @interface EnvOption | ||
*/ | ||
export interface EnvOption { | ||
/** | ||
* project root. | ||
* | ||
* @type {string} | ||
* @memberOf EnvOption | ||
*/ | ||
root?: string; | ||
/** | ||
* help doc | ||
* | ||
* @type {(boolean | string)} | ||
* @memberOf EnvOption | ||
*/ | ||
help?: boolean | string; | ||
test?: boolean | string; | ||
serve?: boolean | string; | ||
e2e?: boolean | string; | ||
release?: boolean; | ||
deploy?: boolean; | ||
watch?: boolean | string; | ||
/** | ||
* run spruce task. | ||
*/ | ||
task?: string; | ||
/** | ||
* project config setting. | ||
* | ||
* @type {string} | ||
* @memberOf EnvOption | ||
*/ | ||
config?: string; | ||
// key?: number; | ||
// value?: number; | ||
// csv?: string; | ||
// dist?: string; | ||
// lang?: string; | ||
publish?: boolean | string; | ||
/** | ||
* group bundle. | ||
* | ||
* @type {Src} | ||
* @memberOf EnvOption | ||
*/ | ||
grp?: Src; | ||
} |
129
src/tools.ts
@@ -7,3 +7,3 @@ import * as _ from 'lodash'; | ||
import { LoaderFactory } from './LoaderFactory'; | ||
import { Src, Asserts, Task, TaskOption, Operation, EnvOption, DynamicTask, Pipe, TaskConfig } from './TaskConfig'; | ||
import { Src, Asserts, Task, TaskOption, Operation, EnvOption, DynamicTask, TaskResult, Pipe, TaskConfig } from './TaskConfig'; | ||
import { DevelopConfig } from './DevelopConfig'; | ||
@@ -118,12 +118,27 @@ import * as chalk from 'chalk'; | ||
protected toSquence(tasks: Array<Src | void>): Src[] { | ||
return <Src[]>_.filter(tasks, t => !!t); | ||
protected toSquence(tasks: Array<TaskResult | TaskResult[] | void>, oper: Operation): Src[] { | ||
let seq: Src[] = []; | ||
_.each(tasks, t => { | ||
if (!t) { | ||
return; | ||
} | ||
if (_.isString(t)) { | ||
seq.push(t); | ||
} else if (_.isArray(t)) { | ||
seq.push(_.flatten(this.toSquence(t, oper))); | ||
} else { | ||
if (t.name) { | ||
if (t.oper && ((t.oper & oper) > 0)) { | ||
seq.push(t.name); | ||
} | ||
} | ||
} | ||
}); | ||
return seq; | ||
} | ||
protected loadTasks(gulp: Gulp, tasks: TaskOption | TaskOption[], env: EnvOption): Promise<Src[]> { | ||
protected loadTasks(gulp: Gulp, tasks: Asserts | Asserts[], env: EnvOption): Promise<Src[]> { | ||
return Promise.all<Src[]>( | ||
_.map(_.isArray(tasks) ? <TaskOption[]>tasks : [<TaskOption>tasks], optask => { | ||
optask.dist = optask.dist || 'dist'; | ||
console.log(chalk.grey('begin load task via loader:'), optask.loader); | ||
let loader = this.createLoader(optask); | ||
let oper: Operation; | ||
@@ -142,2 +157,5 @@ if (env.deploy) { | ||
console.log(chalk.grey('begin load task via loader:'), optask.loader); | ||
let loader = this.createLoader(optask); | ||
return loader.loadConfg(oper, env) | ||
@@ -156,6 +174,9 @@ .then(cfg => { | ||
.then(subtask => { | ||
return loader.load(cfg) | ||
return Promise.all([ | ||
loader.load(cfg), | ||
this.loadAssertTasks(gulp, cfg) | ||
]) | ||
.then(tasks => { | ||
console.log(chalk.green('tasks loaded.')); | ||
return this.setup(gulp, cfg, tasks, subtask) | ||
return this.setup(gulp, cfg, tasks[0], tasks[1], subtask) | ||
}); | ||
@@ -165,8 +186,9 @@ }); | ||
}); | ||
})).then(tsq => { | ||
return _.flatten(tsq); | ||
}); | ||
}) | ||
).then(tsq => { | ||
return _.flatten(tsq); | ||
}); | ||
} | ||
protected setup(gulp: Gulp, config: TaskConfig, tasks: Task[], subGroupTask: Src): Promise<Src[]> { | ||
protected setup(gulp: Gulp, config: TaskConfig, tasks: Task[], assertsTask: Src, subGroupTask: Src): Promise<Src[]> { | ||
return Promise.all(_.map(tasks, t => { | ||
@@ -176,17 +198,15 @@ return t(gulp, config); | ||
.then(ts => { | ||
let tsqs: Src[] = this.toSquence(ts); | ||
if (config.option.runTasks) { | ||
if (_.isFunction(config.option.runTasks)) { | ||
tsqs = config.option.runTasks(config.oper, tsqs, subGroupTask); | ||
} else { | ||
tsqs = config.option.runTasks; | ||
subGroupTask && tsqs.push(subGroupTask); | ||
} | ||
return tsqs; | ||
let tsqs: Src[] = this.toSquence(ts, config.oper); | ||
if (_.isFunction(config.option.runTasks)) { | ||
return config.option.runTasks(config.oper, tsqs, subGroupTask, assertsTask); | ||
} else if (_.isArray(config.option.runTasks)) { | ||
tsqs = config.option.runTasks; | ||
} else if (config.runTasks) { | ||
return config.runTasks(subGroupTask, tsqs); | ||
} else { | ||
subGroupTask && tsqs.push(subGroupTask); | ||
return tsqs; | ||
return config.runTasks(subGroupTask, tsqs, assertsTask); | ||
} | ||
assertsTask && tsqs.splice(0, 0, assertsTask) | ||
subGroupTask && tsqs.splice(0, 0, subGroupTask); | ||
return tsqs; | ||
}); | ||
@@ -219,3 +239,3 @@ } | ||
let lsn = _.isArray(last) ? _.last(last) : last; | ||
let subName = frn + '_' + lsn; | ||
let subName = `${config.option.name ? config.option.name + '_' : ''}${frn}_${lsn}`; | ||
gulp.task(subName, () => { | ||
@@ -232,3 +252,46 @@ return runSequence(gulp, subseq); | ||
} | ||
} | ||
protected loadAssertTasks(gulp: Gulp, config: TaskConfig): Promise<Src> { | ||
let optask = config.option; | ||
if (optask.asserts) { | ||
let tasks = _.map(_.keys(optask.asserts), name => { | ||
let op: Asserts; | ||
let aop = optask.asserts[name]; | ||
if (_.isString(aop) || _.isArray(aop)) { | ||
op = <Asserts>{ src: aop, loader: [{ name: name, pipes: [] }, { name: `${name}-watch`, watch: [name] }] }; | ||
} else { | ||
op = aop; | ||
}; | ||
optask.name = name; | ||
op.src = op.src || (optask.src + '/**/*.' + name); | ||
op.dist = op.dist || optask.dist; | ||
return op; | ||
}); | ||
return Promise.all(_.map(tasks, task => { | ||
return this.loadTasks(gulp, task, config.env) | ||
.then(sq => { | ||
return { | ||
task: task, | ||
sq: sq | ||
} | ||
}); | ||
})) | ||
.then(tseq => { | ||
// asserts tasks run mutil. | ||
return _.map(tseq, t => { | ||
let subseq = t.sq; | ||
if (subseq && subseq.length > 0) { | ||
gulp.task(t.task.name, () => { | ||
return runSequence(gulp, subseq); | ||
}) | ||
return t.task.name; | ||
} | ||
return t.sq; | ||
}); | ||
}); | ||
} else { | ||
return Promise.resolve(null); | ||
} | ||
} | ||
@@ -434,8 +497,4 @@ | ||
stream.pipe(output) | ||
.on('end', () => { | ||
resolve(); | ||
}) | ||
.on('error', (err) => { | ||
reject(err); | ||
}); | ||
.once('end', resolve) | ||
.once('error', reject); | ||
}).catch(err => { | ||
@@ -450,6 +509,4 @@ reject(err); | ||
stream.pipe(gulp.dest(cfg.getDist(cfg.option))) | ||
.on('end', () => { | ||
resolve(); | ||
}) | ||
.on('error', reject); | ||
.once('end', resolve) | ||
.once('error', reject); | ||
}); | ||
@@ -456,0 +513,0 @@ } |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
170369
42
2584
257