@@ -12,6 +12,8 @@ import * as path from 'path';
1212import ConfigManager , { Config , IConfigManager } from '../config-manager' ;
1313import ConfigManagerProxy from '../config-manager/config-manager-proxy' ;
1414import { ConfigQuestionnaire , QuestionnaireSubscriber } from '../config-wizard' ;
15+ import { DependenciesSubscriber } from '../dependencies-manager' ;
16+ import { DependenciesManifest } from '../dependencies-manager/dependencies-installer' ;
1517import { TaskSubscriber } from '../task-manager' ;
1618import Logger , { ILogger } from '../util/logger' ;
1719import { AnyFunction , AnyObject , getPrefix , isObject } from '../util/utility-functions' ;
@@ -23,6 +25,7 @@ export interface InstallableObject {
2325 taskFn : AnyFunction ;
2426 hook : string ;
2527 name : string ;
28+ dependencies ?: DependenciesManifest ;
2629 description ?: string ;
2730 configDefaults ?: Config ;
2831 configQuestionnaire ?: ConfigQuestionnaire ;
@@ -81,7 +84,7 @@ export async function getUtilitiesProvider(name: string): Promise<PluginProvider
8184 // TODO: Will have to make ConfigManager a Singleton
8285 const configManager : IConfigManager = await ConfigManager ( ) ;
8386 // Create logger instance with plugin's name as the channel
84- const logger : ILogger = Logger . getInstance ( ) ( name ) ;
87+ const logger : ILogger = Logger . getInstance ( ) ( `task ${ chalk . hex ( '#7AC0DA' ) ( name ) } ` ) ;
8588
8689 // Instantiate a config manager proxy with access to the plugin's configuration
8790 const config : IConfigManager = ConfigManagerProxy ( configManager , getPrefix ( name ) ) ;
@@ -145,6 +148,7 @@ export async function provideUtilities(taskFn: AnyFunction, name: string): Promi
145148 * Installable plugin factory
146149 * @param configDefaults Configuration defaults object
147150 * @param configQuestionnaire Configuration questionnaire object
151+ * @param dependencies Dependencies manifest object
148152 * @param description Task description
149153 * @param hook Task registration hook
150154 * @param name Task name
@@ -162,6 +166,7 @@ function Installable(plugin: Plugin | InstallableObject): Plugin {
162166 const {
163167 configDefaults,
164168 configQuestionnaire,
169+ dependencies,
165170 description,
166171 hook,
167172 name,
@@ -186,10 +191,12 @@ function Installable(plugin: Plugin | InstallableObject): Plugin {
186191 * Task plugin installer function
187192 * @param taskSubscribers Hook subscribers object
188193 * @param configSubscriber Configuration questionnaire subscriber
194+ * @param dependenciesSubscriber Dependencies installer subscriber
189195 */
190196 async function install (
191197 taskSubscribers : TaskSubscriber ,
192198 configSubscriber : QuestionnaireSubscriber ,
199+ dependenciesSubscriber : DependenciesSubscriber ,
193200 ) : Promise < void > {
194201 // Register Gulp task
195202 gulp . task ( name , await provideUtilities ( taskFn , name ) ) ;
@@ -203,6 +210,11 @@ function Installable(plugin: Plugin | InstallableObject): Plugin {
203210 ) {
204211 await configSubscriber ( configDefaults , configQuestionnaire ) ;
205212 }
213+
214+ // Register plugin dependencies, if available
215+ if ( typeof dependencies !== 'undefined' ) {
216+ await dependenciesSubscriber ( dependencies , name ) ;
217+ }
206218 }
207219
208220
0 commit comments