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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy