Skip to content

Commit

Permalink
feat(ng6): add support for Angular & Angular CLI v6
Browse files Browse the repository at this point in the history
BREAKING CHANGE: the minimal Node version to run the generator is now **8.x.x** (required by some core ng packages like `compiler-cli@6.x.x`)
  • Loading branch information
tinesoft committed May 11, 2018
1 parent 744931b commit ed942e0
Show file tree
Hide file tree
Showing 34 changed files with 405 additions and 258 deletions.
10 changes: 8 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,20 @@ addons:

language: node_js
node_js:
- "6"
- "8"
- 6
- 8

env:
- TEST_SUITE=units
- TEST_SUITE=integrations:ng2
- TEST_SUITE=integrations:ng4
- TEST_SUITE=integrations:ng5
- TEST_SUITE=integrations:ng6

matrix:
exclude:
- node_js: 6
env: TEST_SUITE=integrations:ng6

before_install:
- npm install -g --quiet gulp-cli yo @angular/cli
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ These are the main features of the generator:
* **Enforcing of Angular Git Commit Message Guideline** with [Commitplease](https://github.com/jzaefferer/commitplease) :speech_balloon:
* **Publication** to [npm registry](https://npmjs.org)
* **Releasing** to [Github](https://help.github.com/articles/about-releases/) :octocat:
* Support for Angular 2.x.x, 4.x.x and now **5.x.x**!
* Support for Angular from 2.x.x all the way up to **6.x.x**!
* and so much more out-of-the-box :package:!

# TL; DR :)
Expand Down
78 changes: 62 additions & 16 deletions __tests__/test-app.js
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,10 @@ describe('ngx-library:app', () => {
'src/tsconfig.spec.json',

// Create Demo files
'demo/e2e/app.e2e-spec.ts',
'demo/e2e/app.po.ts',
'demo/e2e/src/app.e2e-spec.ts',
'demo/e2e/src/app.po.ts',
'demo/e2e/tsconfig.e2e.json',
'demo/e2e/protractor.conf.js',
'demo/src/app/getting-started/getting-started-routing.module.ts',
'demo/src/app/getting-started/getting-started.component.ts',
'demo/src/app/getting-started/getting-started.component.html',
Expand Down Expand Up @@ -110,6 +111,7 @@ describe('ngx-library:app', () => {
'demo/src/testing/router-stubs.ts',
'demo/src/index.html',
'demo/src/_variables.scss',
'demo/src/browserslist',
'demo/src/favicon.ico',
'demo/src/hmr.ts',
'demo/src/main.server.ts',
Expand All @@ -121,12 +123,11 @@ describe('ngx-library:app', () => {
'demo/src/tsconfig.spec.json',
'demo/src/typings.d.ts',
'demo/package.json',
'demo/.angular-cli.json',
'demo/angular.json',
'demo/.editorconfig',
'demo/.gitignore',
'demo/karma.conf.js',
'demo/prerender.ts',
'demo/protractor.conf.js',
'demo/tsconfig.json',
'demo/server.ts',
'demo/tsconfig.json',
Expand Down Expand Up @@ -175,7 +176,7 @@ describe('ngx-library:app', () => {
ngPrefix: 'my-lib',
testingFramework: 'karma',
ngVersion: '2.0.0',
ngModules: ['core', 'common', 'animations', 'bazel', 'service-worker'],
ngModules: ['core', 'common', 'animations', 'bazel', 'service-worker', 'elements'],
useGreenkeeper: true,
useCompodoc: false
});
Expand Down Expand Up @@ -219,7 +220,7 @@ describe('ngx-library:app', () => {
ngPrefix: 'my-lib',
testingFramework: 'karma',
ngVersion: '4.0.0',
ngModules: ['core', 'common', 'animations', 'bazel', 'service-worker'],
ngModules: ['core', 'common', 'animations', 'bazel', 'service-worker', 'elements'],
useGreenkeeper: true,
useCompodoc: false
});
Expand Down Expand Up @@ -263,7 +264,7 @@ describe('ngx-library:app', () => {
ngPrefix: 'my-lib',
testingFramework: 'karma',
ngVersion: '5.0.0',
ngModules: ['core', 'common', 'animations', 'bazel', 'service-worker'],
ngModules: ['core', 'common', 'animations', 'bazel', 'service-worker', 'elements'],
useGreenkeeper: true,
useCompodoc: false
});
Expand All @@ -288,6 +289,50 @@ describe('ngx-library:app', () => {
});
});

describe('check generation for ng6', () => {
it('should have set appropriate properties', () => {
let ngLibraryApp = createNgLibraryApp(
{
skipInstall: true,
skipChecks: false
},
{
authorName: 'Awesome Developer',
authorEmail: 'awesome.developer@github.com',
githubUsername: 'awesomedeveloper',
githubRepoName: 'my-ngx-library',
projectName: 'my-ngx-library',
projectVersion: '1.0.0',
projectDescription: 'Angular library for ...',
projectkeywords: 'ng, angular,library',
ngPrefix: 'my-lib',
testingFramework: 'karma',
ngVersion: '6.0.0',
ngModules: ['core', 'common', 'animations', 'bazel', 'service-worker', 'elements'],
useGreenkeeper: true,
useCompodoc: false
});
return ngLibraryApp.then(() => {
assert.deepEqual(ngLibraryApp.generator.ngModules, ['core', 'common', 'animations', 'bazel', 'service-worker', 'elements']);
assert.deepEqual(ngLibraryApp.generator.ngDevDependencies,
['"@angular/compiler" : "6.0.0"',
'"@angular/platform-server" : "6.0.0"',
'"@angular/platform-browser" : "6.0.0"',
'"@angular/platform-browser-dynamic" : "6.0.0"',
'"@angular/compiler-cli" : "6.0.0"',
'"zone.js" : "0.8.26"',
'"rxjs" : "6.0.0"',
'"tslint" : "5.9.1"',
'"gulp-tslint" : "8.1.3"',
'"typescript" : "2.7.2"',
'"awesome-typescript-loader" : "5.0.0"',
'"codelyzer" : "4.2.1"']);
assert.file([
'src/tsconfig.lib.es5.json']);
});
});
});

describe('check generation without skipping installation of dependencies', () => {
it('should install dependencies and run initial build', () => {
let runInstall = jest.fn(() => Promise.resolve());
Expand Down Expand Up @@ -644,8 +689,9 @@ describe('ngx-library:app', () => {
return ngLibraryApp.then(() => {
assert.equal(ngLibraryApp.generator.skipDemo, true);
assert.noFile([
'demo/e2e/app.e2e-spec.ts',
'demo/e2e/app.po.ts',
'demo/e2e/src/app.e2e-spec.ts',
'demo/e2e/src/app.po.ts',
'demo/e2e/protractor.conf.js',
'demo/e2e/tsconfig.e2e.json',
'demo/src/app/getting-started/getting-started-routing.module.ts',
'demo/src/app/getting-started/getting-started.component.ts',
Expand Down Expand Up @@ -692,6 +738,7 @@ describe('ngx-library:app', () => {
'demo/src/testing/router-stubs.ts',
'demo/src/index.html',
'demo/src/_variables.scss',
'demo/src/browserslist',
'demo/src/favicon.ico',
'demo/src/hmr.ts',
'demo/src/main.server.ts',
Expand All @@ -704,12 +751,11 @@ describe('ngx-library:app', () => {
'demo/src/tsconfig.spec.json',
'demo/src/typings.d.ts',
'demo/package.json',
'demo/.angular-cli.json',
'demo/angular.json',
'demo/.editorconfig',
'demo/.gitignore',
'demo/karma.conf.js',
'demo/prerender.ts',
'demo/protractor.conf.js',
'demo/README.md',
'demo/server.ts',
'demo/static.paths.ts',
Expand All @@ -731,8 +777,9 @@ describe('ngx-library:app', () => {
return ngLibraryApp.then(() => {
assert.equal(ngLibraryApp.generator.skipDemo, false);
assert.file([
'demo/e2e/app.e2e-spec.ts',
'demo/e2e/app.po.ts',
'demo/e2e/src/app.e2e-spec.ts',
'demo/e2e/src/app.po.ts',
'demo/e2e/protractor.conf.js',
'demo/e2e/tsconfig.e2e.json',
'demo/src/app/getting-started/getting-started-routing.module.ts',
'demo/src/app/getting-started/getting-started.component.ts',
Expand Down Expand Up @@ -776,7 +823,7 @@ describe('ngx-library:app', () => {
'demo/src/testing/router-stubs.ts',
'demo/src/index.html',
'demo/src/_variables.scss',
'demo/src/favicon.ico',
'demo/src/browserslist',
'demo/src/favicon.ico',
'demo/src/main.server.ts',
'demo/src/main.ts',
Expand All @@ -788,12 +835,11 @@ describe('ngx-library:app', () => {
'demo/src/tsconfig.spec.json',
'demo/src/typings.d.ts',
'demo/package.json',
'demo/.angular-cli.json',
'demo/angular.json',
'demo/.editorconfig',
'demo/.gitignore',
'demo/karma.conf.js',
'demo/prerender.ts',
'demo/protractor.conf.js',
'demo/README.md',
'demo/server.ts',
'demo/static.paths.ts',
Expand Down
10 changes: 5 additions & 5 deletions app/files.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,9 @@ module.exports = [
{name: 'src/_index.ts', path: 'src/index.ts', isTpl: true},

// Create Demo files
{name: 'demo/e2e/_app.e2e-spec.ts', path: 'demo/e2e/app.e2e-spec.ts', isTpl: true},
{name: 'demo/e2e/_app.po.ts', path: 'demo/e2e/app.po.ts', isTpl: true},
{name: 'demo/e2e/src/_app.e2e-spec.ts', path: 'demo/e2e/src/app.e2e-spec.ts', isTpl: true},
{name: 'demo/e2e/src/_app.po.ts', path: 'demo/e2e/src/app.po.ts', isTpl: true},
{name: 'demo/e2e/protractor.conf.js', path: 'demo/e2e/protractor.conf.js', isTpl: false},
{name: 'demo/e2e/tsconfig.e2e.json', path: 'demo/e2e/tsconfig.e2e.json', isTpl: false},
{name: 'demo/src/app/getting-started/_getting-started.component.ts', path: 'demo/src/app/getting-started/getting-started.component.ts', isTpl: true},
{name: 'demo/src/app/getting-started/getting-started-routing.module.ts', path: 'demo/src/app/getting-started/getting-started-routing.module.ts', isTpl: false},
Expand Down Expand Up @@ -76,7 +77,7 @@ module.exports = [
{name: 'demo/src/testing/router-stubs.ts', path: 'demo/src/testing/router-stubs.ts', isTpl: false},
{name: 'demo/src/_index.html', path: 'demo/src/index.html', isTpl: true},
{name: 'demo/src/_variables.scss', path: 'demo/src/_variables.scss', isTpl: false},
{name: 'demo/src/favicon.ico', path: 'demo/src/favicon.ico', isTpl: false},
{name: 'demo/src/browserslist', path: 'demo/src/browserslist', isTpl: false},
{name: 'demo/src/favicon.ico', path: 'demo/src/favicon.ico', isTpl: false},
{name: 'demo/src/hmr.ts', path: 'demo/src/hmr.ts', isTpl: false},
{name: 'demo/src/jestGlobalMocks.ts', path: 'demo/src/jestGlobalMocks.ts', isTpl: false},
Expand All @@ -90,14 +91,13 @@ module.exports = [
{name: 'demo/src/_tsconfig.server.json', path: 'demo/src/tsconfig.server.json', isTpl: true},
{name: 'demo/src/tsconfig.spec.json', path: 'demo/src/tsconfig.spec.json', isTpl: false},
{name: 'demo/src/typings.d.ts', path: 'demo/src/typings.d.ts', isTpl: false},
{name: 'demo/_angular-cli.json', path: 'demo/.angular-cli.json', isTpl: true},
{name: 'demo/_angular.json', path: 'demo/angular.json', isTpl: true},
{name: 'demo/_package.json', path: 'demo/package.json', isTpl: true},
{name: 'demo/_README.md', path: 'demo/README.md', isTpl: true},
{name: 'demo/editorconfig', path: 'demo/.editorconfig', isTpl: false},
{name: 'demo/gitignore', path: 'demo/.gitignore', isTpl: false},
{name: 'demo/karma.conf.js', path: 'demo/karma.conf.js', isTpl: false},
{name: 'demo/prerender.ts', path: 'demo/prerender.ts', isTpl: false},
{name: 'demo/protractor.conf.js', path: 'demo/protractor.conf.js', isTpl: false},
{name: 'demo/proxy.conf.json', path: 'demo/proxy.conf.json', isTpl: false},
{name: 'demo/server.ts', path: 'demo/server.ts', isTpl: false},
{name: 'demo/static.paths.ts', path: 'demo/static.paths.ts', isTpl: false},
Expand Down
23 changes: 19 additions & 4 deletions app/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,15 @@ module.exports = class extends Generator {
this.ngDevDependencies.push('"typescript" : "2.4.2"');
this.ngDevDependencies.push('"awesome-typescript-loader" : "3.3.0"'); // Because it depends on 'typescript'
this.ngDevDependencies.push('"codelyzer" : "4.0.0"');
} else if (this.ngVersionMin === 6) {
this.ngDevDependencies.push('"@angular/compiler-cli" : "6.0.0"');
this.ngDevDependencies.push('"zone.js" : "0.8.26"');
this.ngDevDependencies.push('"rxjs" : "6.0.0"');
this.ngDevDependencies.push('"tslint" : "5.9.1"');
this.ngDevDependencies.push('"gulp-tslint" : "8.1.3"'); // Because it depends on 'tslint'
this.ngDevDependencies.push('"typescript" : "2.7.2"');
this.ngDevDependencies.push('"awesome-typescript-loader" : "5.0.0"'); // Because it depends on 'typescript'
this.ngDevDependencies.push('"codelyzer" : "4.2.1"');
}

if (this.ngModules.indexOf('animations') === -1) {
Expand Down Expand Up @@ -250,8 +259,9 @@ module.exports = class extends Generator {
}

if (this.skipDemo) {
this.exclusions.push('demo/e2e/app.e2e-spec.ts');
this.exclusions.push('demo/e2e/app.po.ts');
this.exclusions.push('demo/e2e/src/app.e2e-spec.ts');
this.exclusions.push('demo/e2e/src/app.po.ts');
this.exclusions.push('demo/e2e/protractor.conf.js');
this.exclusions.push('demo/e2e/tsconfig.e2e.json');
this.exclusions.push('demo/src/app/getting-started/getting-started.component.ts');
this.exclusions.push('demo/src/app/getting-started/getting-started-routing.module.ts');
Expand Down Expand Up @@ -296,6 +306,7 @@ module.exports = class extends Generator {
this.exclusions.push('demo/src/testing/router-stubs.ts');
this.exclusions.push('demo/src/index.html');
this.exclusions.push('demo/src/_variables.scss');
this.exclusions.push('demo/src/browserslist');
this.exclusions.push('demo/src/favicon.ico');
this.exclusions.push('demo/src/hmr.ts');
this.exclusions.push('demo/src/main.server.ts');
Expand All @@ -311,14 +322,13 @@ module.exports = class extends Generator {
this.exclusions.push('demo/src/tsconfig.server.json');
this.exclusions.push('demo/src/tsconfig.spec.json');
this.exclusions.push('demo/src/typings.d.ts');
this.exclusions.push('demo/.angular-cli.json');
this.exclusions.push('demo/angular.json');
this.exclusions.push('demo/package.json');
this.exclusions.push('demo/README.md');
this.exclusions.push('demo/.editorconfig');
this.exclusions.push('demo/.gitignore');
this.exclusions.push('demo/karma.conf.js');
this.exclusions.push('demo/prerender.ts');
this.exclusions.push('demo/protractor.conf.js');
this.exclusions.push('demo/proxy.conf.json');
this.exclusions.push('demo/server.ts');
this.exclusions.push('demo/static.paths.ts');
Expand Down Expand Up @@ -446,6 +456,11 @@ module.exports = class extends Generator {
_.remove(this.ngModules, ngModule => ngModule === 'bazel' || ngModule === 'service-worker');
}

if (this.ngVersionMin < 6 && this.ngModules.indexOf('elements') !== -1) {
this.warning(`Module 'elements' is only available for angular v6+. Removing it.`);
_.remove(this.ngModules, ngModule => ngModule === 'elements');
}

// Save config
this.config.set('version', this.pkg.version);
this.config.set('authorName', this.authorName);
Expand Down
8 changes: 5 additions & 3 deletions app/prompts.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ const NG_MODULES = [
'platform-webworker',
{name: 'animations (angular 4+ only)', value: 'animations'},
{name: 'bazel (angular 5+ only)', value: 'bazel'},
{name: 'service-worker (angular 5+ only)', value: 'service-worker'}
{name: 'service-worker (angular 5+ only)', value: 'service-worker'},
{name: 'elements (angular 6+ only)', value: 'elements'}
];

module.exports = info => {
Expand Down Expand Up @@ -82,8 +83,9 @@ module.exports = info => {
choices: [
{name: '2.X.X', value: '2.0.0'},
{name: '4.X.X', value: '4.0.0'},
{name: '5.X.X', value: '5.0.0'}],
default: 0
{name: '5.X.X', value: '5.0.0'},
{name: '6.X.X', value: '6.0.0'}],
default: 3
},
{
type: 'checkbox',
Expand Down
Loading

0 comments on commit ed942e0

Please sign in to comment.