Skip to content

Commit 7804509

Browse files
committed
fix(deps): Display component providers
fix #514
1 parent b010638 commit 7804509

File tree

7 files changed

+62
-19
lines changed

7 files changed

+62
-19
lines changed

src/app/compiler/deps/component-dep.factory.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export class ComponentDepFactory {
2121
// animations?: string[]; // TODO
2222
changeDetection: this.helper.getComponentChangeDetection(props, srcFile),
2323
encapsulation: this.helper.getComponentEncapsulation(props, srcFile),
24-
// entryComponents?: string; // TODO waiting doc infos
24+
entryComponents: this.helper.getComponentEntryComponents(props, srcFile),
2525
exportAs: this.helper.getComponentExportAs(props, srcFile),
2626
host: this.helper.getComponentHost(props),
2727
inputs: this.helper.getComponentInputsMetadata(props, srcFile),
@@ -49,6 +49,9 @@ export class ComponentDepFactory {
4949
sourceCode: srcFile.getText(),
5050
exampleUrls: this.helper.getComponentExampleUrls(srcFile.getText())
5151
};
52+
if (typeof this.helper.getComponentPreserveWhitespaces(props, srcFile) !== 'undefined') {
53+
componentDep.preserveWhitespaces = this.helper.getComponentPreserveWhitespaces(props, srcFile);
54+
}
5255
if (this.configuration.mainData.disableLifeCycleHooks) {
5356
componentDep.methodsClass = cleanLifecycleHooksFromMethods(componentDep.methodsClass);
5457
}
@@ -93,6 +96,8 @@ export interface IComponentDep extends IDep {
9396
propertiesClass: Array<any>;
9497
methodsClass: Array<any>;
9598

99+
entryComponents: Array<any>;
100+
96101
hostBindings: Array<any>;
97102
hostListeners: Array<any>;
98103

@@ -105,4 +110,6 @@ export interface IComponentDep extends IDep {
105110
extends?: any;
106111
implements?: any;
107112
accessors?: Object;
113+
114+
preserveWhitespaces?: any;
108115
}

src/app/compiler/deps/helpers/component-helper.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,12 @@ export class ComponentHelper {
7373
.map((name) => this.symbolHelper.parseDeepIndentifier(name));
7474
}
7575

76+
public getComponentEntryComponents(props: ReadonlyArray<ts.ObjectLiteralElementLike>, srcFile: ts.SourceFile): Array<IParseDeepIdentifierResult> {
77+
return this.symbolHelper
78+
.getSymbolDeps(props, 'entryComponents', srcFile)
79+
.map((name) => this.symbolHelper.parseDeepIndentifier(name));
80+
}
81+
7682
public getComponentViewProviders(props: ReadonlyArray<ts.ObjectLiteralElementLike>, srcFile: ts.SourceFile): Array<IParseDeepIdentifierResult> {
7783
return this.symbolHelper
7884
.getSymbolDeps(props, 'viewProviders', srcFile)
@@ -93,6 +99,10 @@ export class ComponentHelper {
9399
return exampleUrls;
94100
}
95101

102+
public getComponentPreserveWhitespaces(props: ReadonlyArray<ts.ObjectLiteralElementLike>, srcFile: ts.SourceFile): string {
103+
return this.symbolHelper.getSymbolDeps(props, 'preserveWhitespaces', srcFile).pop();
104+
}
105+
96106
public getComponentSelector(props: ReadonlyArray<ts.ObjectLiteralElementLike>, srcFile: ts.SourceFile): string {
97107
return this.symbolHelper.getSymbolDeps(props, 'selector', srcFile).pop();
98108
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { IHtmlEngineHelper, IHandlebarsOptions } from './html-engine-helper.interface';
2+
3+
export class HasOwnHelper implements IHtmlEngineHelper {
4+
public helperFunc(context: any, entity, key: any, options: IHandlebarsOptions): string {
5+
if (Object.hasOwnProperty.call(entity, key)) {
6+
return options.fn(context);
7+
} else {
8+
return options.inverse(context);
9+
}
10+
}
11+
}

src/app/engines/html.engine.helpers.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import { ParseDescriptionHelper } from './html-engine-helpers/parse-description.
3333
import { OneParameterHasHelper } from './html-engine-helpers/one-parameter-has.helper';
3434
import { ConfigurationInterface } from '../interfaces/configuration.interface';
3535
import { ElementAloneHelper } from './html-engine-helpers/element-alone.helper';
36+
import { HasOwnHelper } from './html-engine-helpers/has-own.helper';
3637

3738
export class HtmlEngineHelpers {
3839
public registerHelpers(
@@ -68,6 +69,7 @@ export class HtmlEngineHelpers {
6869
this.registerHelper(bars, 'parseDescription', new ParseDescriptionHelper(dependenciesEngine));
6970
this.registerHelper(bars, 'one-parameter-has', new OneParameterHasHelper());
7071
this.registerHelper(bars, 'element-alone', new ElementAloneHelper(dependenciesEngine));
72+
this.registerHelper(bars, 'hasOwn', new HasOwnHelper());
7173
}
7274

7375
private registerHelper(bars, key: string, helper: IHtmlEngineHelper) {

src/templates/partials/component-detail.hbs

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,11 @@
7777
{{#if component.entryComponents}}
7878
<tr>
7979
<td class="col-md-3">entryComponents</td>
80-
<td class="col-md-9"><code>{{component.entryComponents}}</code></td>
80+
<td class="col-md-9">
81+
{{#each component.entryComponents}}
82+
{{> link-type type=name }}
83+
{{/each}}
84+
</td>
8185
</tr>
8286
{{/if}}
8387

@@ -95,16 +99,9 @@
9599
</tr>
96100
{{/if}}
97101

98-
{{#if component.inputs}}
99-
<tr>
100-
<td class="col-md-3">inputs</td>
101-
<td class="col-md-9"><code>{{breakComma component.inputs}}</code></td>
102-
</tr>
103-
{{/if}}
104-
105102
{{#if component.interpolation}}
106103
<tr>
107-
<td class="col-md-3">host</td>
104+
<td class="col-md-3">interpolation</td>
108105
<td class="col-md-9"><code>{{component.interpolation}}</code></td>
109106
</tr>
110107
{{/if}}
@@ -116,22 +113,20 @@
116113
</tr>
117114
{{/if}}
118115

119-
{{#if component.outputs}}
116+
{{#hasOwn component 'preserveWhitespaces'}}
120117
<tr>
121-
<td class="col-md-3">outputs</td>
122-
<td class="col-md-9"><code>{{breakComma component.outputs}}</code></td>
118+
<td class="col-md-3">preserveWhitespaces</td>
119+
<td class="col-md-9"><code>{{component.preserveWhitespaces}}</code></td>
123120
</tr>
124-
{{/if}}
121+
{{/hasOwn}}
125122

126123
{{#if component.providers}}
127124
<tr>
128125
<td class="col-md-3">providers</td>
129126
<td class="col-md-9">
130-
<code>
131127
{{#each component.providers}}
132-
{{name}}
128+
{{> link-type type=name }}
133129
{{/each}}
134-
</code>
135130
</td>
136131
</tr>
137132
{{/if}}
@@ -184,7 +179,7 @@
184179
<td class="col-md-9">
185180
<code>
186181
{{#each component.viewProviders}}
187-
{{name}}
182+
{{> link-type type=name }}
188183
{{/each}}
189184
</code>
190185
</td>

test/src/cli/cli-generation-big-app.spec.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -586,4 +586,19 @@ describe('CLI simple generation - big app', () => {
586586
expect(file).to.contain('<a href="./injectables/EmitterService.html" >EmitterService</a>');
587587
expect(file).to.contain('<a href="./pipes/FirstUpperPipe2.html" >FirstUpperPipe2</a>');
588588
});
589+
590+
it('should support component metadata preserveWhiteSpaces', () => {
591+
let file = read(distFolder + '/components/AboutComponent.html');
592+
expect(file).to.contain('<td class="col-md-3">preserveWhitespaces</td>');
593+
});
594+
595+
it('should support component metadata entryComponents', () => {
596+
let file = read(distFolder + '/components/AboutComponent.html');
597+
expect(file).to.contain('<code><a href="../classes/Todo.html" target="_self" >TodoComponent</a></code>');
598+
});
599+
600+
it('should support component metadata providers', () => {
601+
let file = read(distFolder + '/components/AboutComponent.html');
602+
expect(file).to.contain('<code><a href="../injectables/EmitterService.html" target="_self" >EmitterService</a></code>');
603+
});
589604
});

test/src/todomvc-ng2/src/app/about/about.component.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ import { Subscription } from 'rxjs/Subscription';
1717
*/
1818
@Component({
1919
selector: 'about',
20-
templateUrl: './about.component.html'
20+
templateUrl: './about.component.html',
21+
providers: [EmitterService],
22+
entryComponents: [TodoComponent, ListComponent],
23+
preserveWhitespaces: false
2124
})
2225
export class AboutComponent {
2326

0 commit comments

Comments
 (0)