|
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