Skip to content

Commit 7267c29

Browse files
committed
Make it possible to pick v5 or v6 from the ng-add schematic
Fixes #346
1 parent 8fb3f61 commit 7267c29

File tree

5 files changed

+70
-13
lines changed

5 files changed

+70
-13
lines changed

projects/schematics/src/ng-add/index.spec.ts

+20-3
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@ import { Tree } from '@angular-devkit/schematics';
22
import { SchematicTestRunner } from '@angular-devkit/schematics/testing';
33
import * as path from 'path';
44
import { Schema } from './schema';
5+
import { angularFontawesomeVersion, iconPackVersion, v5 } from './versions';
56

67
const collectionPath = path.join(__dirname, '../collection.json');
78

89
describe('ng-add', () => {
9-
it('adds dependencies to package.json', async () => {
10+
it('adds v6 dependencies to package.json', async () => {
1011
const { runner, appTree } = await setup();
1112

1213
const tree = await runner.runSchematicAsync<Schema>('ng-add', {}, appTree).toPromise();
@@ -16,8 +17,24 @@ describe('ng-add', () => {
1617

1718
const dependencies = packageJson.dependencies;
1819

19-
expect(dependencies['@fortawesome/fontawesome-svg-core']).toBeDefined();
20-
expect(dependencies['@fortawesome/angular-fontawesome']).toBeDefined();
20+
expect(dependencies['@fortawesome/fontawesome-svg-core']).toBe(iconPackVersion);
21+
expect(dependencies['@fortawesome/free-solid-svg-icons']).toBe(iconPackVersion);
22+
expect(dependencies['@fortawesome/angular-fontawesome']).toBe(angularFontawesomeVersion);
23+
});
24+
25+
it('adds v5 dependencies to package.json', async () => {
26+
const { runner, appTree } = await setup();
27+
28+
const tree = await runner.runSchematicAsync<Schema>('ng-add', { version: '5' }, appTree).toPromise();
29+
30+
const packageJson = JSON.parse(tree.readContent('package.json'));
31+
expect(packageJson.dependencies).toBeDefined();
32+
33+
const dependencies = packageJson.dependencies;
34+
35+
expect(dependencies['@fortawesome/fontawesome-svg-core']).toBe(v5.svgCoreVersion);
36+
expect(dependencies['@fortawesome/free-solid-svg-icons']).toBe(v5.iconPackVersion);
37+
expect(dependencies['@fortawesome/angular-fontawesome']).toBe(angularFontawesomeVersion);
2138
});
2239

2340
it('adds FontAwesomeModule import to the AppModule', async () => {

projects/schematics/src/ng-add/index.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ import { addPackageJsonDependency, NodeDependencyType } from '@schematics/angula
1111
import { getAppModulePath } from '@schematics/angular/utility/ng-ast-utils';
1212
import { getWorkspace } from '@schematics/angular/utility/workspace';
1313
import { Schema } from './schema';
14-
import { angularFontawesomeVersion, iconPackVersion, svgCoreVersion } from './versions';
14+
import { angularFontawesomeVersion, iconPackVersion, v5 } from './versions';
1515

1616
export default function (options: Schema): Rule {
1717
return chain([
1818
(tree: Tree, context: SchematicContext) => {
1919
addPackageJsonDependency(tree, {
2020
type: NodeDependencyType.Default,
2121
name: '@fortawesome/fontawesome-svg-core',
22-
version: svgCoreVersion,
22+
version: options.version === '6' ? iconPackVersion : v5.svgCoreVersion,
2323
});
2424

2525
addPackageJsonDependency(tree, {
@@ -33,7 +33,7 @@ export default function (options: Schema): Rule {
3333
addPackageJsonDependency(tree, {
3434
type: NodeDependencyType.Default,
3535
name: `@fortawesome/${pack}-svg-icons`,
36-
version: iconPackVersion,
36+
version: options.version === '6' ? iconPackVersion : v5.iconPackVersion,
3737
});
3838
}
3939

projects/schematics/src/ng-add/schema.json

+37-5
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,40 @@
1111
"$source": "projectName"
1212
}
1313
},
14+
"version": {
15+
"description": "The FontAwesome version to install.",
16+
"type": "string",
17+
"default": "6",
18+
"x-prompt": {
19+
"message": "Choose Font Awesome version you would like to use:",
20+
"type": "list",
21+
"items": [
22+
{
23+
"value": "6",
24+
"label": "Font Awesome 6"
25+
},
26+
{
27+
"value": "5",
28+
"label": "Font Awesome 5"
29+
}
30+
]
31+
}
32+
},
1433
"iconPackages": {
1534
"description": "The icon packages to install.",
1635
"type": "array",
1736
"items": {
1837
"type": "string",
19-
"enum": ["free-solid", "free-regular", "free-brands", "pro-solid", "pro-regular", "pro-light", "pro-duotone"]
38+
"enum": [
39+
"free-solid",
40+
"free-regular",
41+
"free-brands",
42+
"pro-solid",
43+
"pro-regular",
44+
"pro-light",
45+
"pro-duotone",
46+
"pro-thin"
47+
]
2048
},
2149
"default": ["free-solid"],
2250
"x-prompt": {
@@ -38,19 +66,23 @@
3866
},
3967
{
4068
"value": "pro-solid",
41-
"label": "Pro Solid Icons [ Requires: https://fontawesome.com/pro ]"
69+
"label": "Pro Solid Icons [ Requires Pro plan: https://fontawesome.com/plans ]"
4270
},
4371
{
4472
"value": "pro-regular",
45-
"label": "Pro Regular Icons [ Requires: https://fontawesome.com/pro ]"
73+
"label": "Pro Regular Icons [ Requires Pro plan: https://fontawesome.com/plans ]"
4674
},
4775
{
4876
"value": "pro-light",
49-
"label": "Pro Light Icons [ Requires: https://fontawesome.com/pro ]"
77+
"label": "Pro Light Icons [ Requires Pro plan: https://fontawesome.com/plans ]"
5078
},
5179
{
5280
"value": "pro-duotone",
53-
"label": "Pro Duotone Icons [ Requires: https://fontawesome.com/pro ]"
81+
"label": "Pro Duotone Icons [ Requires Pro plan: https://fontawesome.com/plans ]"
82+
},
83+
{
84+
"value": "pro-thin",
85+
"label": "Pro Thin Icons [ Requires Pro plan: https://fontawesome.com/plans ]"
5486
}
5587
]
5688
}

projects/schematics/src/ng-add/schema.ts

+4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ export interface Schema {
22
/** Name of the project. */
33
project?: string;
44

5+
/** The FontAwesome version to install. */
6+
version?: '5' | '6';
7+
58
/** The icon packages to install */
69
iconPackages?: (
710
| 'free-solid'
@@ -11,5 +14,6 @@ export interface Schema {
1114
| 'pro-regular'
1215
| 'pro-light'
1316
| 'pro-duotone'
17+
| 'pro-thin'
1418
)[];
1519
}
+6-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1-
export const svgCoreVersion = '~1.2.36';
21
export const angularFontawesomeVersion = '~0.10.1';
3-
export const iconPackVersion = '^5.15.4';
2+
export const iconPackVersion = '^6.1.0';
3+
4+
export const v5 = {
5+
svgCoreVersion: '~1.2.36',
6+
iconPackVersion: '^5.15.4',
7+
};

0 commit comments

Comments
 (0)