1- import { chain , noop , Rule , SchematicContext , Tree } from '@angular-devkit/schematics' ;
1+ import { virtualFs , workspaces } from '@angular-devkit/core' ;
2+ import { chain , noop , Rule , SchematicContext , SchematicsException , Tree } from '@angular-devkit/schematics' ;
23import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks' ;
34import { addPackageJsonDependency , NodeDependency , NodeDependencyType } from '../helpers' ;
4- import { getWorkspace } from '@schematics/angular/utility/config' ;
5- import { addModuleImportToRootModule , getProjectFromWorkspace } from '@angular/cdk/schematics' ;
5+ import { addModuleImportToRootModule } from '@angular/cdk/schematics' ;
66
77/** Loads the full version from the given Angular package gracefully. */
88function loadPackageVersionGracefully ( context : SchematicContext ) : string | null {
@@ -50,15 +50,12 @@ export function installPackageJsonDependencies(): Rule {
5050 } ;
5151}
5252
53- export function addModuleToImports ( options : any ) : Rule {
53+ export function addModuleToImports ( options : any , project : any ) : Rule {
5454 return ( host : Tree , context : SchematicContext ) => {
55- const workspace = getWorkspace ( host ) ;
56- // @ts -ignore
57- const project = getProjectFromWorkspace ( workspace , options . project ) ;
5855 const moduleName = 'MatPasswordStrengthModule' ;
5956
6057 addModuleImportToRootModule ( host , moduleName , '@angular-material-extensions/password-strength' , project ) ;
61- context . logger . log ( 'info' , `✅️ "${ moduleName } " is imported` ) ;
58+ context . logger . log ( 'info' , `✅️ "${ moduleName } " is imported into project ${ options . project } ` ) ;
6259
6360 return host ;
6461 } ;
@@ -79,10 +76,45 @@ export function getPackageVersionFromPackageJson(tree: Tree, name: string): stri
7976 return null ;
8077}
8178
79+ function createHost ( tree : Tree ) : workspaces . WorkspaceHost {
80+ return {
81+ async readFile ( path : string ) : Promise < string > {
82+ const data = tree . read ( path ) ;
83+ if ( ! data ) {
84+ throw new SchematicsException ( 'File not found.' ) ;
85+ }
86+ return virtualFs . fileBufferToString ( data ) ;
87+ } ,
88+ async writeFile ( path : string , data : string ) : Promise < void > {
89+ return tree . overwrite ( path , data ) ;
90+ } ,
91+ async isDirectory ( path : string ) : Promise < boolean > {
92+ return ! tree . exists ( path ) && tree . getDir ( path ) . subfiles . length > 0 ;
93+ } ,
94+ async isFile ( path : string ) : Promise < boolean > {
95+ return tree . exists ( path ) ;
96+ } ,
97+ } ;
98+ }
99+
82100export default function ( options : any ) : Rule {
83- return chain ( [
84- options && options . skipPackageJson ? noop ( ) : addPackageJsonDependencies ( ) ,
85- options && options . skipPackageJson ? noop ( ) : installPackageJsonDependencies ( ) ,
86- options && options . skipModuleImport ? noop ( ) : addModuleToImports ( options ) ,
87- ] ) ;
101+ return async ( tree : Tree ) => {
102+ const host = createHost ( tree ) ;
103+ const { workspace } = await workspaces . readWorkspace ( '/' , host ) ;
104+
105+ if ( ! options . project ) {
106+ options . project = workspace . extensions . defaultProject ;
107+ }
108+
109+ const project = workspace . projects . get ( options . project ) ;
110+ if ( ! project ) {
111+ throw new SchematicsException ( `Invalid project name: ${ options . project } ` ) ;
112+ }
113+
114+ return chain ( [
115+ options && options . skipPackageJson ? noop ( ) : addPackageJsonDependencies ( ) ,
116+ options && options . skipPackageJson ? noop ( ) : installPackageJsonDependencies ( ) ,
117+ options && options . skipModuleImport ? noop ( ) : addModuleToImports ( options , project ) ,
118+ ] ) ;
119+ } ;
88120}
0 commit comments