Skip to content

Commit 06dad8c

Browse files
committed
fix(app): Nestjs controllers class inheritance
fix #1140
1 parent af3752e commit 06dad8c

File tree

5 files changed

+28
-3
lines changed

5 files changed

+28
-3
lines changed

src/app/compiler/angular/deps/controller-dep.factory.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export class ControllerDepFactory {
1515
): IControllerDep {
1616
const sourceCode = srcFile.getText();
1717
const hash = crypto.createHash('sha512').update(sourceCode).digest('hex');
18-
let infos: IControllerDep = {
18+
const infos: IControllerDep = {
1919
name,
2020
id: 'controller-' + name + '-' + hash,
2121
file: file,
@@ -32,6 +32,9 @@ export class ControllerDepFactory {
3232
infos.prefix = properties[0].text;
3333
}
3434
}
35+
if (IO.extends) {
36+
infos.extends = IO.extends;
37+
}
3538
return infos;
3639
}
3740
}
@@ -45,4 +48,5 @@ export interface IControllerDep extends IDep {
4548
methodsClass: Array<any>;
4649
deprecated: boolean;
4750
deprecationMessage: string;
51+
extends?: any;
4852
}

src/utils/extends-merger.util.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export class ExtendsMerger {
88
private classes;
99
private injectables;
1010
private directives;
11+
private controllers;
1112

1213
private static instance: ExtendsMerger;
1314
private constructor() {}
@@ -23,6 +24,7 @@ export class ExtendsMerger {
2324
this.classes = deps.classes;
2425
this.injectables = deps.injectables;
2526
this.directives = deps.directives;
27+
this.controllers = deps.controllers;
2628

2729
const mergeExtendedProperties = component => {
2830
let ext;
@@ -121,6 +123,7 @@ export class ExtendsMerger {
121123

122124
this.components.forEach(mergeExtendedProperties);
123125
this.directives.forEach(mergeExtendedProperties);
126+
this.controllers.forEach(mergeExtendedProperties);
124127

125128
const mergeExtendedClasses = el => {
126129
let ext;
@@ -155,6 +158,7 @@ export class ExtendsMerger {
155158
this.classes.forEach(mergeExtendedClasses);
156159
this.injectables.forEach(mergeExtendedClasses);
157160
this.directives.forEach(mergeExtendedClasses);
161+
this.controllers.forEach(mergeExtendedClasses);
158162

159163
return deps;
160164
}
@@ -189,7 +193,8 @@ export class ExtendsMerger {
189193
this.components,
190194
this.classes,
191195
this.injectables,
192-
this.directives
196+
this.directives,
197+
this.controllers
193198
);
194199
const result = find(mergedData, { name: name } as any);
195200
return result || false;

test/fixtures/nest-app/src/app.controller.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import { Get, Controller } from '@nestjs/common';
22
import { AppService } from './app.service';
3+
import { ControllerBase } from './controller.base';
34

45
/**
56
* The main app controller
67
*/
78
@Controller()
8-
export class AppController {
9+
export class AppController extends ControllerBase {
910
constructor(private readonly appService: AppService) {}
1011

1112
@Get()
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { Get } from '@nestjs/common';
2+
export class ControllerBase {
3+
protected controllerBaseString = 'How are you?';
4+
@Get('how-are-you')
5+
getHowAreYou(): string {
6+
return this.controllerBaseString;
7+
}
8+
}

test/src/cli/cli-nest.spec.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,5 +59,12 @@ describe('CLI nest projects support', () => {
5959
'@OneToMany(type &#x3D;&gt; ArticleEntity, article &#x3D;&gt; article.author)'
6060
);
6161
});
62+
63+
it('it should contain a controller page with inheritance', () => {
64+
const file = read(`${distFolder}/controllers/AppController.html`);
65+
expect(file).to.contain(
66+
'code><a href="../classes/ControllerBase.html" target="_self" >ControllerBase'
67+
);
68+
});
6269
});
6370
});

0 commit comments

Comments
 (0)