1
1
import { Rule , SchematicContext , Tree , chain } from '@angular-devkit/schematics' ;
2
- import { addPackageToPackageJson } from './utils' ;
2
+ import { addAssetToAngularJson , addPackageToPackageJson } from './utils' ;
3
3
import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks' ;
4
+ import { IADTSchematicsOptions } from './models/schematics-options' ;
5
+ import { ADT_SUPPORTED_STYLES , ADTStyleOptions } from './models/style-options' ;
4
6
5
- export default function ( _options : any ) : Rule {
7
+ export default function ( _options : IADTSchematicsOptions ) : Rule {
6
8
return chain ( [
7
- addPackageJsonDependencies ( ) ,
9
+ addPackageJsonDependencies ( _options ) ,
8
10
installPackageJsonDependencies ( ) ,
9
- updateAngularJsonFile ( )
11
+ updateAngularJsonFile ( _options )
10
12
] ) ;
11
13
}
12
14
13
- function addPackageJsonDependencies ( ) {
15
+ function addPackageJsonDependencies ( options : IADTSchematicsOptions ) {
14
16
return ( tree : Tree , context : SchematicContext ) => {
15
17
// Update package.json
18
+ const styleDeps = ADT_SUPPORTED_STYLES . find ( e => e . style == options . style ) ;
19
+
16
20
const dependencies = [
17
21
{ version : '^3.4.1' , name : 'jquery' , isDev : false } ,
18
22
{ version : '^1.10.20' , name : 'datatables.net' , isDev : false } ,
19
- { version : '^1.10.20' , name : 'datatables.net-dt' , isDev : false } ,
20
- { version : '^11.0.0' , name : 'angular-datatables' , isDev : false } ,
21
23
{ version : '^3.3.33' , name : '@types/jquery' , isDev : true } ,
22
24
{ version : '^1.10.18' , name : '@types/datatables.net' , isDev : true }
23
25
] ;
24
26
27
+ if ( styleDeps ) {
28
+ if ( styleDeps . style != ADTStyleOptions . DT )
29
+ context . logger . log ( 'warn' , 'Your project needs Bootstrap CSS installed and configured for changes to take affect.' ) ;
30
+ styleDeps . packageJson . forEach ( e => dependencies . push ( e ) ) ;
31
+ }
32
+
25
33
dependencies . forEach ( dependency => {
26
- addPackageToPackageJson ( tree , dependency . name , dependency . version , dependency . isDev ) ;
27
- context . logger . log ( 'info' , `✅️ Added "${ dependency . name } " into "${ dependency . isDev ? 'devDependencies' : 'dependencies' } "` ) ;
34
+ const result = addPackageToPackageJson ( tree , dependency . name , dependency . version , dependency . isDev ) ;
35
+ if ( result ) {
36
+ context . logger . log ( 'info' , `✅️ Added "${ dependency . name } " into "${ dependency . isDev ? 'devDependencies' : 'dependencies' } "` ) ;
37
+ } else {
38
+ context . logger . log ( 'info' , `ℹ️ Skipped adding "${ dependency . name } " into package.json` ) ;
39
+ }
28
40
} ) ;
29
41
return tree ;
30
42
} ;
@@ -40,31 +52,27 @@ function installPackageJsonDependencies(): Rule {
40
52
}
41
53
42
54
43
- function updateAngularJsonFile ( ) {
55
+ function updateAngularJsonFile ( options : IADTSchematicsOptions ) {
44
56
return ( tree : Tree , context : SchematicContext ) => {
45
- try {
46
- const angularJsonFile = tree . read ( 'angular.json' ) ;
47
57
48
- if ( angularJsonFile ) {
49
- const angularJsonFileObject = JSON . parse ( angularJsonFile . toString ( 'utf-8' ) ) ;
50
- const project = Object . keys ( angularJsonFileObject [ 'projects' ] ) [ 0 ] ;
51
- const projectObject = angularJsonFileObject . projects [ project ] ;
52
- const targets = projectObject . targets ? projectObject . targets : projectObject . architect ;
58
+ const styleDeps = ADT_SUPPORTED_STYLES . find ( e => e . style == options . style ) ;
53
59
54
- const styles = targets . build . options . styles ;
55
- const scripts = targets . build . options . scripts ;
60
+ const assets = [
61
+ { path : 'node_modules/jquery/dist/jquery.js' , target : 'scripts' , fancyName : 'jQuery Core' } ,
62
+ { path : 'node_modules/datatables.net/js/jquery.dataTables.js' , target : 'scripts' , fancyName : 'DataTables.net Core JS' } ,
63
+ ] ;
56
64
57
- styles . push ( 'node_modules/datatables.net-dt/css/jquery.dataTables.css' ) ;
58
- scripts . push ( 'node_modules/jquery/dist/jquery.js' ) ;
59
- scripts . push ( 'node_modules/datatables.net/js/jquery.dataTables.js' ) ;
65
+ if ( styleDeps ) {
66
+ styleDeps . angularJson . forEach ( e => assets . push ( e ) ) ;
67
+ }
60
68
61
- tree . overwrite ( 'angular.json' , JSON . stringify ( angularJsonFileObject , null , 2 ) ) ;
62
- context . logger . log ( 'info' , `✅️ Updated angular.json` ) ;
69
+ assets . forEach ( asset => {
70
+ const result = addAssetToAngularJson ( tree , asset . target , asset . path ) ;
71
+ if ( result ) {
72
+ context . logger . log ( 'info' , `✅️ Added "${ asset . fancyName } " into angular.json` ) ;
63
73
} else {
64
- context . logger . log ( 'error ' , '🚫 Failed to locate angular.json else.' ) ;
74
+ context . logger . log ( 'info ' , `ℹ️ Skipped adding " ${ asset . fancyName } " into angular.json` ) ;
65
75
}
66
- } catch ( e ) {
67
- context . logger . log ( 'error' , `🚫 Failed to update angular.json foobar.` ) ;
68
- }
76
+ } ) ;
69
77
} ;
70
78
}
0 commit comments