|
1 | | -import { chain, Rule, SchematicContext, SchematicsException, Tree } from '@angular-devkit/schematics'; |
| 1 | +import { Rule, SchematicContext, SchematicsException, Tree } from '@angular-devkit/schematics'; |
2 | 2 | import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks'; |
3 | | -import { addPackageToPackageJson, getPackageVersionFromPackageJson, PackageJson } from './package-config'; |
| 3 | +import { addPackageJsonDependency, NodeDependency, NodeDependencyType } from '@schematics/angular/utility/dependencies'; |
| 4 | +import { getPackageVersionFromPackageJson, PackageJson } from './package-config'; |
4 | 5 | import * as pkgJson from '../../package.json'; |
5 | 6 |
|
6 | | -const addCoreUIIconsAngular = (): Rule => { |
7 | | - return (tree: Tree, context: SchematicContext) => { |
8 | | - context.logger.info(`Installing @coreui/icons-angular as dependency`); |
9 | | - context.addTask(new NodePackageInstallTask({ packageName: '@coreui/icons-angular' })); |
10 | | - return tree; |
11 | | - }; |
12 | | -}; |
13 | | - |
14 | | -const addCoreUIAngular = (): Rule => { |
15 | | - return (tree: Tree, context: SchematicContext) => { |
16 | | - context.logger.info(`Installing @coreui/angular as dependency`); |
17 | | - context.addTask(new NodePackageInstallTask()); |
18 | | - return tree; |
19 | | - }; |
20 | | -}; |
21 | | - |
22 | 7 | export function ngAdd(): Rule { |
23 | 8 | return (tree: Tree, context: SchematicContext) => { |
| 9 | + const pkg = pkgJson as unknown as PackageJson; |
| 10 | + |
24 | 11 | context.logger.info(``); |
25 | | - context.logger.info('Installing @coreui/angular dependencies...'); |
| 12 | + context.logger.info(`Installing ${pkg.name} dependencies...`); |
| 13 | + |
26 | 14 | const ngCoreVersionTag = getPackageVersionFromPackageJson(tree, '@angular/core'); |
27 | 15 | context.logger.info(`@angular/core version ${ngCoreVersionTag}`); |
28 | 16 | if (!ngCoreVersionTag) { |
29 | 17 | throw new SchematicsException('@angular/core version not found'); |
30 | 18 | } |
31 | | - const projDeps = ['@angular/animations', '@angular/common', '@angular/core', '@angular/router']; |
32 | | - projDeps.forEach((dep) => { |
33 | | - addPackageToPackageJson(tree, dep, ngCoreVersionTag); |
34 | | - }); |
35 | 19 |
|
36 | | - const pkg = pkgJson as PackageJson; |
37 | | - const libPeerDeps: string[] = ['@angular/cdk', '@coreui/coreui']; |
38 | | - libPeerDeps.forEach((dep: string) => { |
39 | | - const version = pkg.peerDependencies[dep]; |
40 | | - context.logger.info(`Including ${dep} version ${version}`); |
41 | | - addPackageToPackageJson(tree, dep, version); |
| 20 | + const projectDeps: NodeDependency[] = [ |
| 21 | + { name: '@angular/animations', type: NodeDependencyType.Default, version: ngCoreVersionTag, overwrite: false }, |
| 22 | + { name: '@angular/common', type: NodeDependencyType.Default, version: ngCoreVersionTag, overwrite: false }, |
| 23 | + { name: '@angular/core', type: NodeDependencyType.Default, version: ngCoreVersionTag, overwrite: false }, |
| 24 | + { name: '@angular/router', type: NodeDependencyType.Default, version: ngCoreVersionTag, overwrite: false } |
| 25 | + ]; |
| 26 | + |
| 27 | + projectDeps.forEach((dep) => { |
| 28 | + addPackageJsonDependency(tree, dep); |
| 29 | + context.logger.info(`Added dependency: ${dep.name}@${dep.version}`); |
42 | 30 | }); |
43 | | - const libDeps: string[] = ['@popperjs/core']; |
44 | | - libDeps.forEach((dep: string) => { |
45 | | - const version = pkg.dependencies[dep]; |
46 | | - context.logger.info(`Including ${dep} version ${version}`); |
47 | | - addPackageToPackageJson(tree, dep, version); |
| 31 | + |
| 32 | + const libraryDeps: NodeDependency[] = [ |
| 33 | + { |
| 34 | + name: '@angular/cdk', |
| 35 | + type: NodeDependencyType.Default, |
| 36 | + version: pkg.peerDependencies['@angular/cdk'], |
| 37 | + overwrite: false |
| 38 | + }, |
| 39 | + { |
| 40 | + name: '@coreui/coreui', |
| 41 | + type: NodeDependencyType.Default, |
| 42 | + version: pkg.peerDependencies['@coreui/coreui'], |
| 43 | + overwrite: true |
| 44 | + }, |
| 45 | + { |
| 46 | + name: '@coreui/icons-angular', |
| 47 | + type: NodeDependencyType.Default, |
| 48 | + version: pkg.peerDependencies['@coreui/icons-angular'], |
| 49 | + overwrite: true |
| 50 | + }, |
| 51 | + { |
| 52 | + name: '@popperjs/core', |
| 53 | + type: NodeDependencyType.Default, |
| 54 | + version: pkg.dependencies['@popperjs/core'], |
| 55 | + overwrite: true |
| 56 | + } |
| 57 | + ]; |
| 58 | + |
| 59 | + libraryDeps.forEach((dep) => { |
| 60 | + addPackageJsonDependency(tree, dep); |
| 61 | + context.logger.info(`Added dependency: ${dep.name}@${dep.version}`); |
48 | 62 | }); |
49 | 63 |
|
50 | | - return chain([addCoreUIIconsAngular(), addCoreUIAngular()]); |
| 64 | + const library: NodeDependency = { |
| 65 | + name: pkg.name, |
| 66 | + type: NodeDependencyType.Default, |
| 67 | + version: `~${pkg.version}`, |
| 68 | + overwrite: true |
| 69 | + }; |
| 70 | + |
| 71 | + addPackageJsonDependency(tree, library); |
| 72 | + context.logger.info(`Installing ${library.name}@${library.version}`); |
| 73 | + context.addTask(new NodePackageInstallTask()); |
| 74 | + |
| 75 | + return tree; |
51 | 76 | }; |
52 | 77 | } |
0 commit comments