From f1d4dd9f466d77f1eb9b5a7f739ee2dabbac790e Mon Sep 17 00:00:00 2001 From: --get Date: Thu, 4 Oct 2018 14:39:37 -0400 Subject: [PATCH] feat(schematics): add option for no module in lib --- .../src/collection/library/index.ts | 112 ++++++++++-------- .../src/collection/library/library.spec.ts | 30 +++++ .../src/collection/library/schema.d.ts | 1 + .../src/collection/library/schema.json | 5 + 4 files changed, 97 insertions(+), 51 deletions(-) diff --git a/packages/schematics/src/collection/library/index.ts b/packages/schematics/src/collection/library/index.ts index 65414506ff..63047d9b9e 100644 --- a/packages/schematics/src/collection/library/index.ts +++ b/packages/schematics/src/collection/library/index.ts @@ -241,49 +241,55 @@ function updateProject(options: NormalizedSchema): Rule { host.delete(path.join(options.projectRoot, 'tsconfig.spec.json')); } - host.overwrite( - path.join(libRoot, `${options.name}.module.ts`), - ` - import { NgModule } from '@angular/core'; - import { CommonModule } from '@angular/common'; - - @NgModule({ - imports: [ - CommonModule - ] - }) - export class ${options.moduleName} { } - ` - ); - - if (options.unitTestRunner !== 'none') { - host.create( - path.join(libRoot, `${options.name}.module.spec.ts`), + if (options.module) { + host.overwrite( + path.join(libRoot, `${options.name}.module.ts`), ` - import { async, TestBed } from '@angular/core/testing'; - import { ${options.moduleName} } from './${options.name}.module'; - - describe('${options.moduleName}', () => { - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [ ${options.moduleName} ] - }) - .compileComponents(); - })); - - it('should create', () => { - expect(${options.moduleName}).toBeDefined(); - }); - }); + import { NgModule } from '@angular/core'; + import { CommonModule } from '@angular/common'; + + @NgModule({ + imports: [ + CommonModule + ] + }) + export class ${options.moduleName} { } ` ); + + if (options.unitTestRunner !== 'none') { + host.create( + path.join(libRoot, `${options.name}.module.spec.ts`), + ` + import { async, TestBed } from '@angular/core/testing'; + import { ${options.moduleName} } from './${options.name}.module'; + + describe('${options.moduleName}', () => { + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ ${options.moduleName} ] + }) + .compileComponents(); + })); + + it('should create', () => { + expect(${options.moduleName}).toBeDefined(); + }); + }); + ` + ); + } + host.overwrite( + `${options.projectRoot}/src/index.ts`, + ` + export * from './lib/${options.name}.module'; + ` + ); + } else { + host.delete(path.join(libRoot, `${options.name}.module.ts`)); + host.create(path.join(libRoot, `.gitkeep`), ''); + host.overwrite(`${options.projectRoot}/src/index.ts`, ''); } - host.overwrite( - `${options.projectRoot}/src/index.ts`, - ` - export * from './lib/${options.name}.module'; - ` - ); return chain([ updateJsonInTree(getWorkspacePath(host), json => { @@ -400,6 +406,21 @@ function updateLibPackageNpmScope(options: NormalizedSchema): Rule { }); } +function addModule(options: NormalizedSchema): Rule { + return chain([ + options.routing && options.lazy + ? addLazyLoadedRouterConfiguration(options) + : noop(), + options.routing && options.lazy && options.parentModule + ? addLoadChildren(options) + : noop(), + options.routing && !options.lazy ? addRouterConfiguration(options) : noop(), + options.routing && !options.lazy && options.parentModule + ? addChildren(options) + : noop() + ]); +} + export default function(schema: Schema): Rule { return (host: Tree, context: SchematicContext) => { const options = normalizeOptions(host, schema); @@ -428,18 +449,7 @@ export default function(schema: Schema): Rule { : noop(), options.publishable ? updateLibPackageNpmScope(options) : noop(), - options.routing && options.lazy - ? addLazyLoadedRouterConfiguration(options) - : noop(), - options.routing && options.lazy && options.parentModule - ? addLoadChildren(options) - : noop(), - options.routing && !options.lazy - ? addRouterConfiguration(options) - : noop(), - options.routing && !options.lazy && options.parentModule - ? addChildren(options) - : noop(), + options.module ? addModule(options) : noop(), formatFiles(options) ])(host, context); }; diff --git a/packages/schematics/src/collection/library/library.spec.ts b/packages/schematics/src/collection/library/library.spec.ts index e9accd3dc7..97a5d94c64 100644 --- a/packages/schematics/src/collection/library/library.spec.ts +++ b/packages/schematics/src/collection/library/library.spec.ts @@ -139,6 +139,21 @@ describe('lib', () => { ).toBeFalsy(); }); + it('should not generate a module for --module false', () => { + const tree = schematicRunner.runSchematic( + 'lib', + { name: 'myLib', module: false }, + appTree + ); + expect(tree.exists('libs/my-lib/src/lib/my-lib.module.ts')).toEqual( + false + ); + expect(tree.exists('libs/my-lib/src/lib/my-lib.module.spec.ts')).toEqual( + false + ); + expect(tree.exists('libs/my-lib/src/lib/.gitkeep')).toEqual(true); + }); + it('should default the prefix to npmScope', () => { const noPrefix = schematicRunner.runSchematic( 'lib', @@ -231,6 +246,21 @@ describe('lib', () => { tsconfigJson.compilerOptions.paths['my-dir-my-lib/*'] ).toBeUndefined(); }); + + it('should not generate a module for --module false', () => { + const tree = schematicRunner.runSchematic( + 'lib', + { name: 'myLib', directory: 'myDir', module: false }, + appTree + ); + expect( + tree.exists('libs/my-dir/my-lib/src/lib/my-dir-my-lib.module.ts') + ).toEqual(false); + expect( + tree.exists('libs/my-dir/my-lib/src/lib/my-dir-my-lib.module.spec.ts') + ).toEqual(false); + expect(tree.exists('libs/my-dir/my-lib/src/lib/.gitkeep')).toEqual(true); + }); }); describe('router', () => { diff --git a/packages/schematics/src/collection/library/schema.d.ts b/packages/schematics/src/collection/library/schema.d.ts index 63526e0302..1da702e0a3 100644 --- a/packages/schematics/src/collection/library/schema.d.ts +++ b/packages/schematics/src/collection/library/schema.d.ts @@ -6,6 +6,7 @@ export interface Schema { directory?: string; sourceDir?: string; publishable: boolean; + module: boolean; spec?: boolean; flat?: boolean; diff --git a/packages/schematics/src/collection/library/schema.json b/packages/schematics/src/collection/library/schema.json index 69362d6542..3f5a190bed 100644 --- a/packages/schematics/src/collection/library/schema.json +++ b/packages/schematics/src/collection/library/schema.json @@ -53,6 +53,11 @@ "description": "Add RouterModule.forChild when set to true, and a simple array of routes when set to false." }, + "module": { + "type": "boolean", + "default": true, + "description": "Include an NgModule in the library." + }, "parentModule": { "type": "string", "description":