From be9cde5cf9ad4e981d017a50e8edcc36778b5f60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Morch=C3=B3n=20Poveda?= Date: Tue, 24 Feb 2015 17:09:42 +0100 Subject: [PATCH 1/5] Base classes to inherit from them (step 1 of X) Add a base class --- yeoman-generator/yeoman-generator.d.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/yeoman-generator/yeoman-generator.d.ts b/yeoman-generator/yeoman-generator.d.ts index aed7a8f03..fa2dec44b 100644 --- a/yeoman-generator/yeoman-generator.d.ts +++ b/yeoman-generator/yeoman-generator.d.ts @@ -20,6 +20,22 @@ declare module yo { sourceRoot(rootPath: string): string; } + export class YeomanGeneratorBase implements IYeomanGenerator { + argument(name: string, config: IArgumentConfig): void; + composeWith(namespace: string, options: any, settings?: IComposeSetting): IYeomanGenerator; + defaultFor(name: string): void; + destinationRoot(rootPath: string): string; + determineAppname(): void; + getCollisionFilter(): (output: any) => void; + hookFor(name: string, config: IHookConfig): void; + option(name: string, config: IYeomanGeneratorOption): void; + rootGeneratorName(): string; + run(args?: any): void; + run(args: any, callback?: Function): void; + runHooks(callback?: Function): void; + sourceRoot(rootPath: string): string; + } + export interface IArgumentConfig { desc: string; required: boolean; From 0a2199ac29b73d1d9324d133a2bc47161dd33908 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Morch=C3=B3n=20Poveda?= Date: Tue, 24 Feb 2015 17:21:04 +0100 Subject: [PATCH 2/5] Interfaces & classes Interfaces with "new" now are Interfaces without "new" and clases with constructor. --- yeoman-generator/yeoman-generator.d.ts | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/yeoman-generator/yeoman-generator.d.ts b/yeoman-generator/yeoman-generator.d.ts index fa2dec44b..dda2d7caa 100644 --- a/yeoman-generator/yeoman-generator.d.ts +++ b/yeoman-generator/yeoman-generator.d.ts @@ -76,15 +76,19 @@ declare module yo { end: () => void; } - export interface IBase { - new(args: string, options: any): IYeomanGenerator; - new(args: string[], options: any): IYeomanGenerator; - extend(protoProps: IQueueProps, staticProps?: any): IYeomanGenerator; + export interface INamedBase extends IYeomanGenerator { } - export interface INamedBase { - new(args: string, options: any): IYeomanGenerator; - new(args: string[], options: any): IYeomanGenerator; + export interface IBase extends INamedBase { + extend(protoProps: IQueueProps, staticProps?: any): IYeomanGenerator; + } + + export class Namedbase extends YeomanGeneratorBase implements INamedBase { + constructor(args: string | string[], options: any); + } + + export class Base extends Namedbase implements IBase { + extend(protoProps: IQueueProps, staticProps?: any): IYeomanGenerator; } export interface IAssert { From b000c516422c47c9657271b637b119ac035d8558 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Morch=C3=B3n=20Poveda?= Date: Tue, 24 Feb 2015 17:26:25 +0100 Subject: [PATCH 3/5] Updated module "generators" with classes Change the un-inheritable interfaces Base: IBase and NamedBase: INamedBase by the new clases Base and NamedBase. Now you can do like this: ``` typescript class WflGenerator extends yo.generators.Base { } ``` --- yeoman-generator/yeoman-generator.d.ts | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/yeoman-generator/yeoman-generator.d.ts b/yeoman-generator/yeoman-generator.d.ts index dda2d7caa..e5f9f62e3 100644 --- a/yeoman-generator/yeoman-generator.d.ts +++ b/yeoman-generator/yeoman-generator.d.ts @@ -83,14 +83,6 @@ declare module yo { extend(protoProps: IQueueProps, staticProps?: any): IYeomanGenerator; } - export class Namedbase extends YeomanGeneratorBase implements INamedBase { - constructor(args: string | string[], options: any); - } - - export class Base extends Namedbase implements IBase { - extend(protoProps: IQueueProps, staticProps?: any): IYeomanGenerator; - } - export interface IAssert { file(path: string): void; file(paths: string[]): void; @@ -150,10 +142,16 @@ declare module yo { var file: any; var assert: IAssert; var test: ITestHelper; - var generators: { - Base: IBase; - NamedBase: INamedBase; - }; + module generators { + + export class Namedbase extends YeomanGeneratorBase implements INamedBase { + constructor(args: string | string[], options: any); + } + + export class Base extends Namedbase implements IBase { + extend(protoProps: IQueueProps, staticProps?: any): IYeomanGenerator; + } + } } declare module "yeoman-generator" { From 293abd9b04aeca521a2c6bbb376da017ca89eb51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Morch=C3=B3n=20Poveda?= Date: Tue, 24 Feb 2015 17:40:25 +0100 Subject: [PATCH 4/5] Fixes Namedbase -> NamedBase static Base.extend --- yeoman-generator/yeoman-generator.d.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/yeoman-generator/yeoman-generator.d.ts b/yeoman-generator/yeoman-generator.d.ts index e5f9f62e3..bc11f2e30 100644 --- a/yeoman-generator/yeoman-generator.d.ts +++ b/yeoman-generator/yeoman-generator.d.ts @@ -80,7 +80,6 @@ declare module yo { } export interface IBase extends INamedBase { - extend(protoProps: IQueueProps, staticProps?: any): IYeomanGenerator; } export interface IAssert { @@ -144,12 +143,12 @@ declare module yo { var test: ITestHelper; module generators { - export class Namedbase extends YeomanGeneratorBase implements INamedBase { + export class NamedBase extends YeomanGeneratorBase implements INamedBase { constructor(args: string | string[], options: any); } - export class Base extends Namedbase implements IBase { - extend(protoProps: IQueueProps, staticProps?: any): IYeomanGenerator; + export class Base extends NamedBase implements IBase { + static extend(protoProps: IQueueProps, staticProps?: any): IYeomanGenerator; } } } From 022d3ea8436a98264daf329ccdaf09384333b454 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Morch=C3=B3n=20Poveda?= Date: Tue, 24 Feb 2015 17:57:02 +0100 Subject: [PATCH 5/5] Extend NodeJS.EventEmitter As seen here: https://github.com/yeoman/generator/blob/master/lib/base.js ``` JavaScript var Base = module.exports = function Base(args, options) { events.EventEmitter.call(this); ``` --- yeoman-generator/yeoman-generator.d.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/yeoman-generator/yeoman-generator.d.ts b/yeoman-generator/yeoman-generator.d.ts index bc11f2e30..f6d0dd981 100644 --- a/yeoman-generator/yeoman-generator.d.ts +++ b/yeoman-generator/yeoman-generator.d.ts @@ -2,6 +2,7 @@ // Project: https://github.com/yeoman/generator // Definitions by: Kentaro Okuno // Definitions: https://github.com/borisyankov/DefinitelyTyped +/// declare module yo { export interface IYeomanGenerator { @@ -20,7 +21,7 @@ declare module yo { sourceRoot(rootPath: string): string; } - export class YeomanGeneratorBase implements IYeomanGenerator { + export class YeomanGeneratorBase implements IYeomanGenerator, NodeJS.EventEmitter { argument(name: string, config: IArgumentConfig): void; composeWith(namespace: string, options: any, settings?: IComposeSetting): IYeomanGenerator; defaultFor(name: string): void; @@ -34,6 +35,14 @@ declare module yo { run(args: any, callback?: Function): void; runHooks(callback?: Function): void; sourceRoot(rootPath: string): string; + addListener(event: string, listener: Function): NodeJS.EventEmitter; + on(event: string, listener: Function): NodeJS.EventEmitter; + once(event: string, listener: Function): NodeJS.EventEmitter; + removeListener(event: string, listener: Function): NodeJS.EventEmitter; + removeAllListeners(event?: string): NodeJS.EventEmitter; + setMaxListeners(n: number): void; + listeners(event: string): Function[]; + emit(event: string, ...args: any[]): boolean; } export interface IArgumentConfig {