Skip to content

Commit ecd68a1

Browse files
committed
feat: add new ng-standalone template
1 parent d131640 commit ecd68a1

File tree

19 files changed

+230
-21
lines changed

19 files changed

+230
-21
lines changed

.github/workflows/main.yml

+3
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ jobs:
4141
- name: Add example app
4242
run: bit add integration/demo-app --log
4343

44+
- name: Use example app
45+
run: bit use integration.examples/demo-app --log
46+
4447
- name: Install dependencies
4548
run: bit install --log
4649

angular/envs/base-env/angular-base-env.bit-env.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ import { NgWebpackBundler, NgWebpackDevServer } from '@bitdev/angular.dev-servic
1818
import {
1919
NgAppTemplate,
2020
NgEnvTemplate,
21-
NgModuleTemplate
21+
NgModuleTemplate,
22+
NgStandaloneTemplate
2223
} from '@bitdev/angular.templates.generators';
2324
import {
2425
AngularStarter,
@@ -224,6 +225,7 @@ export abstract class AngularBaseEnv implements AngularEnvInterface {
224225
const envName = this.constructor.name;
225226
return TemplateList.from([
226227
NgModuleTemplate.from({ envName, angularVersion: this.angularVersion }),
228+
NgStandaloneTemplate.from({ envName, angularVersion: this.angularVersion }),
227229
NgEnvTemplate.from({ envName, angularVersion: this.angularVersion }),
228230
NgAppTemplate.from({ envName, angularVersion: this.angularVersion })
229231
]);

angular/examples/my-angular-env/my-angular-env.bit-env.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@ import {
44
BundlerProvider,
55
DevServerProvider
66
} from '@bitdev/angular.dev-services.preview.preview';
7-
import { AngularStarter } from '@bitdev/angular.templates.starters';
87
import {
98
NgAppTemplate,
109
NgEnvTemplate,
11-
NgModuleTemplate
10+
NgModuleTemplate,
11+
NgStandaloneTemplate
1212
} from '@bitdev/angular.templates.generators';
13+
import { AngularStarter } from '@bitdev/angular.templates.starters';
1314
import { BundlerContext, DevServerContext } from '@teambit/bundler';
1415
import { ESLintLinter, EslintTask } from '@teambit/defender.eslint-linter';
1516
import { JestTask, JestTester } from '@teambit/defender.jest-tester';
@@ -120,6 +121,7 @@ export class MyAngularEnv extends AngularEnv {
120121
const envName = this.constructor.name;
121122
return TemplateList.from([
122123
NgModuleTemplate.from({envName, angularVersion: this.angularVersion}),
124+
NgStandaloneTemplate.from({envName, angularVersion: this.angularVersion}),
123125
NgEnvTemplate.from({envName, angularVersion: this.angularVersion}),
124126
NgAppTemplate.from({envName, angularVersion: this.angularVersion})
125127
]);

angular/examples/my-angular-v13-env/my-angular-v13-env.bit-env.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ import {
44
DevServerProvider
55
} from '@bitdev/angular.dev-services.preview.preview';
66
import { AngularV13Env } from '@bitdev/angular.envs.angular-v13-env';
7-
import { AngularStarter } from '@bitdev/angular.templates.starters';
87
import {
98
NgAppTemplate,
109
NgEnvTemplate,
1110
NgModuleTemplate
1211
} from '@bitdev/angular.templates.generators';
12+
import { AngularStarter } from '@bitdev/angular.templates.starters';
1313
import { BundlerContext, DevServerContext } from '@teambit/bundler';
1414
import { ESLintLinter, EslintTask } from '@teambit/defender.eslint-linter';
1515
import { JestTask, JestTester } from '@teambit/defender.jest-tester';

angular/examples/my-angular-v14-env/my-angular-v14-env.bit-env.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@ import {
44
DevServerProvider
55
} from '@bitdev/angular.dev-services.preview.preview';
66
import { AngularV14Env } from '@bitdev/angular.envs.angular-v14-env';
7-
import { AngularStarter } from '@bitdev/angular.templates.starters';
87
import {
98
NgAppTemplate,
109
NgEnvTemplate,
11-
NgModuleTemplate
10+
NgModuleTemplate,
11+
NgStandaloneTemplate
1212
} from '@bitdev/angular.templates.generators';
13+
import { AngularStarter } from '@bitdev/angular.templates.starters';
1314
import { BundlerContext, DevServerContext } from '@teambit/bundler';
1415
import { ESLintLinter, EslintTask } from '@teambit/defender.eslint-linter';
1516
import { JestTask, JestTester } from '@teambit/defender.jest-tester';
@@ -120,6 +121,7 @@ export class MyAngularV14Env extends AngularV14Env {
120121
const envName = this.constructor.name;
121122
return TemplateList.from([
122123
NgModuleTemplate.from({envName, angularVersion: this.angularVersion}),
124+
NgStandaloneTemplate.from({envName, angularVersion: this.angularVersion}),
123125
NgEnvTemplate.from({envName, angularVersion: this.angularVersion}),
124126
NgAppTemplate.from({envName, angularVersion: this.angularVersion})
125127
]);

angular/examples/my-angular-v15-env/my-angular-v15-env.bit-env.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@ import {
44
DevServerProvider
55
} from '@bitdev/angular.dev-services.preview.preview';
66
import { AngularV15Env } from '@bitdev/angular.envs.angular-v15-env';
7-
import { AngularStarter } from '@bitdev/angular.templates.starters';
87
import {
98
NgAppTemplate,
109
NgEnvTemplate,
11-
NgModuleTemplate
10+
NgModuleTemplate,
11+
NgStandaloneTemplate
1212
} from '@bitdev/angular.templates.generators';
13+
import { AngularStarter } from '@bitdev/angular.templates.starters';
1314
import { BundlerContext, DevServerContext } from '@teambit/bundler';
1415
import { ESLintLinter, EslintTask } from '@teambit/defender.eslint-linter';
1516
import { JestTask, JestTester } from '@teambit/defender.jest-tester';
@@ -120,6 +121,7 @@ export class MyAngularV15Env extends AngularV15Env {
120121
const envName = this.constructor.name;
121122
return TemplateList.from([
122123
NgModuleTemplate.from({envName, angularVersion: this.angularVersion}),
124+
NgStandaloneTemplate.from({envName, angularVersion: this.angularVersion}),
123125
NgEnvTemplate.from({envName, angularVersion: this.angularVersion}),
124126
NgAppTemplate.from({envName, angularVersion: this.angularVersion})
125127
]);

angular/examples/my-angular-v16-env/my-angular-v16-env.bit-env.ts

+13-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,16 @@
1-
import { AngularPreview, BundlerProvider, DevServerProvider } from '@bitdev/angular.dev-services.preview.preview';
2-
import { AngularStarter } from '@bitdev/angular.templates.starters';
3-
import { NgAppTemplate, NgEnvTemplate, NgModuleTemplate } from '@bitdev/angular.templates.generators';
1+
import {
2+
AngularPreview,
3+
BundlerProvider,
4+
DevServerProvider
5+
} from '@bitdev/angular.dev-services.preview.preview';
46
import { AngularV16Env } from '@bitdev/angular.envs.angular-v16-env';
7+
import {
8+
NgAppTemplate,
9+
NgEnvTemplate,
10+
NgModuleTemplate,
11+
NgStandaloneTemplate
12+
} from '@bitdev/angular.templates.generators';
13+
import { AngularStarter } from '@bitdev/angular.templates.starters';
514
import { BundlerContext, DevServerContext } from '@teambit/bundler';
615
import { ESLintLinter, EslintTask } from '@teambit/defender.eslint-linter';
716
import { JestTask, JestTester } from '@teambit/defender.jest-tester';
@@ -112,6 +121,7 @@ export class MyAngularV16Env extends AngularV16Env {
112121
const envName = this.constructor.name;
113122
return TemplateList.from([
114123
NgModuleTemplate.from({envName, angularVersion: this.angularVersion}),
124+
NgStandaloneTemplate.from({envName, angularVersion: this.angularVersion}),
115125
NgEnvTemplate.from({envName, angularVersion: this.angularVersion}),
116126
NgAppTemplate.from({envName, angularVersion: this.angularVersion})
117127
]);

angular/examples/my-angular-v17-env/my-angular-v17-env.bit-env.ts

+13-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,16 @@
1-
import { AngularPreview, BundlerProvider, DevServerProvider } from '@bitdev/angular.dev-services.preview.preview';
2-
import { AngularStarter } from '@bitdev/angular.templates.starters';
3-
import { NgAppTemplate, NgEnvTemplate, NgModuleTemplate } from '@bitdev/angular.templates.generators';
1+
import {
2+
AngularPreview,
3+
BundlerProvider,
4+
DevServerProvider
5+
} from '@bitdev/angular.dev-services.preview.preview';
46
import { AngularV17Env } from '@bitdev/angular.envs.angular-v17-env';
7+
import {
8+
NgAppTemplate,
9+
NgEnvTemplate,
10+
NgModuleTemplate,
11+
NgStandaloneTemplate
12+
} from '@bitdev/angular.templates.generators';
13+
import { AngularStarter } from '@bitdev/angular.templates.starters';
514
import { BundlerContext, DevServerContext } from '@teambit/bundler';
615
import { ESLintLinter, EslintTask } from '@teambit/defender.eslint-linter';
716
import { JestTask, JestTester } from '@teambit/defender.jest-tester';
@@ -112,6 +121,7 @@ export class MyAngularV17Env extends AngularV17Env {
112121
const envName = this.constructor.name;
113122
return TemplateList.from([
114123
NgModuleTemplate.from({envName, angularVersion: this.angularVersion}),
124+
NgStandaloneTemplate.from({envName, angularVersion: this.angularVersion}),
115125
NgEnvTemplate.from({envName, angularVersion: this.angularVersion}),
116126
NgAppTemplate.from({envName, angularVersion: this.angularVersion})
117127
]);

angular/templates/generators/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
export { NgModuleTemplate } from './ng-module';
2+
export { NgStandaloneTemplate } from './ng-standalone';
23
export { NgEnvTemplate } from './ng-env';
34
export { NgAppTemplate } from './ng-app';

angular/templates/generators/ng-module/files/component-spec.ts

-2
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,7 @@ describe('${Name}Component', () => {
1919
imports: [ ${Name}Module ]
2020
})
2121
.compileComponents();
22-
});
2322
24-
beforeEach(() => {
2523
fixture = TestBed.createComponent(${Name}Component);
2624
component = fixture.componentInstance;
2725
fixture.detectChanges();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { ComponentContext, ComponentFile } from '@teambit/generator';
2+
3+
export const componentSpecFile = (context: ComponentContext): ComponentFile => {
4+
const { name, namePascalCase: Name } = context;
5+
6+
return {
7+
relativePath: `${name}.spec.ts`,
8+
content: `import { ComponentFixture, TestBed } from '@angular/core/testing';
9+
10+
import { ${Name}Component } from './${name}.component';
11+
12+
describe('${Name}Component', () => {
13+
let component: ${Name}Component;
14+
let fixture: ComponentFixture<${Name}Component>;
15+
16+
beforeEach(async () => {
17+
await TestBed.configureTestingModule({
18+
imports: [ ${Name}Component ]
19+
})
20+
.compileComponents();
21+
22+
fixture = TestBed.createComponent(${Name}Component);
23+
component = fixture.componentInstance;
24+
fixture.detectChanges();
25+
});
26+
27+
it('should create', () => {
28+
expect(component).toBeTruthy();
29+
});
30+
});
31+
`,
32+
};
33+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { ComponentContext, ComponentFile } from '@teambit/generator';
2+
3+
export const componentStylesFile = (context: ComponentContext): ComponentFile => {
4+
const { name } = context;
5+
return {
6+
relativePath: `${name}.component.scss`,
7+
content: `:host {
8+
font-size: inherit;
9+
}`,
10+
};
11+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { ComponentContext, ComponentFile } from '@teambit/generator';
2+
3+
export const componentFile = (context: ComponentContext): ComponentFile => {
4+
const { name, namePascalCase: Name } = context;
5+
return {
6+
relativePath: `${name}.component.ts`,
7+
content: `import { Component } from '@angular/core';
8+
import { CommonModule } from '@angular/common';
9+
10+
@Component({
11+
selector: '${name}',
12+
standalone: true,
13+
imports: [CommonModule],
14+
template: \`
15+
<p>
16+
${name} works!
17+
</p>
18+
\`,
19+
styleUrls: ['./${name}.component.scss']
20+
})
21+
export class ${Name}Component {
22+
constructor() {}
23+
}
24+
`,
25+
};
26+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { ComponentContext, ComponentFile } from '@teambit/generator';
2+
3+
export const compositionFile = (context: ComponentContext): ComponentFile => {
4+
const { name, namePascalCase: Name } = context;
5+
6+
const standaloneComposition = `import { Component } from '@angular/core';
7+
import { ${Name}Component } from './${name}.component';
8+
9+
@Component({
10+
standalone: true,
11+
selector: '${name}-composition-cmp',
12+
imports: [${Name}Component],
13+
template: \`${Name} composition: <${name}></${name}>\`
14+
})
15+
export class ${Name}CompositionComponent {}
16+
`;
17+
18+
return {
19+
relativePath: `${name}.composition.ts`,
20+
content: standaloneComposition,
21+
};
22+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { ComponentContext, ComponentFile } from '@teambit/generator';
2+
3+
export const docsFile = (context: ComponentContext): ComponentFile => {
4+
const { name, namePascalCase: Name } = context;
5+
6+
return {
7+
relativePath: `${name}.docs.md`,
8+
content: `---
9+
labels: ['angular', 'typescript', '${name}']
10+
description: 'A \`${name}\` component.'
11+
---
12+
13+
# ${Name} documentation
14+
15+
Import \`${Name}Component\` into your application:
16+
17+
\`\`\`ts
18+
import { ${Name}Component } from './${name}.component';
19+
20+
// add it to your component imports
21+
@Component({
22+
selector: 'app-root',
23+
standalone: true,
24+
imports: [
25+
${Name}Component
26+
]
27+
})
28+
export class AppComponent {}
29+
\`\`\`
30+
31+
Use \`${Name}Component\` in your generators:
32+
33+
\`\`\`html
34+
<${name}></${name}>
35+
\`\`\`
36+
`,
37+
};
38+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { ComponentContext, ComponentFile } from '@teambit/generator';
2+
3+
export const publicApiFile = (context: ComponentContext): ComponentFile => {
4+
const { name } = context;
5+
return {
6+
isMain: true,
7+
relativePath: 'public-api.ts',
8+
content: `/**
9+
* Entry point for this Angular library, do not move or rename this file.
10+
*/
11+
export * from './${name}.component';
12+
`,
13+
};
14+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { ComponentContext, ComponentTemplate } from '@teambit/generator';
2+
import { AngularComponentTemplateOptions } from '@bitdev/angular.dev-services.common';
3+
import { componentFile } from './files/component';
4+
import { componentSpecFile } from './files/component-spec';
5+
import { componentStylesFile } from './files/component-styles';
6+
import { compositionFile } from './files/composition';
7+
import { docsFile } from './files/docs';
8+
import { publicApiFile } from './files/public-api';
9+
10+
export class NgStandaloneTemplate implements ComponentTemplate {
11+
private constructor(
12+
readonly angularVersion: number,
13+
readonly name = 'ng-standalone',
14+
readonly description = 'create a standalone Angular component',
15+
readonly hidden = false
16+
) {}
17+
18+
generateFiles(context: ComponentContext) {
19+
return [
20+
publicApiFile(context),
21+
componentFile(context),
22+
componentStylesFile(context),
23+
docsFile(context),
24+
componentSpecFile(context),
25+
compositionFile(context),
26+
];
27+
}
28+
29+
static from(options: AngularComponentTemplateOptions & { angularVersion: number }) {
30+
return () =>
31+
new NgStandaloneTemplate(
32+
options.angularVersion,
33+
options.name,
34+
options.description,
35+
options.hidden
36+
);
37+
}
38+
}

scripts/keep-env.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,9 @@ const defaultEnv = args('default');
2525
const regexp = [];
2626
regexp.push(new RegExp(`\\s\\s"bitdev\\.angular\\/envs\\/angular\\-v(?!${version})\\d\\d?\\-env":\\s\\{\\},\\n`, 'g'));
2727

28-
// Remove default env & app if needed
28+
// Remove default env if needed
2929
if (!defaultEnv) {
3030
regexp.push(new RegExp(`\\s\\s"bitdev\\.angular\\/angular\\-env":\\s\\{\\},\\n`, 'g'));
31-
regexp.push(new RegExp(`\\s\\s"integration\\/demo-app":\\s\\{\\},\\n`, 'g'));
3231
}
3332

3433
try {

0 commit comments

Comments
 (0)