Skip to content

Commit 5addaed

Browse files
committed
fix(material/schematics): update JSON.parse usages to cast the result as a type
Update JSON.parse usages to be better typed rather than resulting in an any type.
1 parent 03f2683 commit 5addaed

File tree

4 files changed

+29
-12
lines changed

4 files changed

+29
-12
lines changed

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ import {getWorkspace} from '@schematics/angular/utility/workspace';
1313
import {COLLECTION_PATH} from '../index.spec';
1414
import {addPackageToPackageJson} from './package-config';
1515

16+
interface PackageJson {
17+
dependencies: Record<string, string>;
18+
}
19+
1620
describe('ng-add schematic', () => {
1721
let runner: SchematicTestRunner;
1822
let appTree: Tree;
@@ -43,7 +47,7 @@ describe('ng-add schematic', () => {
4347

4448
/** Removes the specified dependency from the /package.json in the given tree. */
4549
function removePackageJsonDependency(tree: Tree, dependencyName: string) {
46-
const packageContent = JSON.parse(getFileContent(tree, '/package.json'));
50+
const packageContent = JSON.parse(getFileContent(tree, '/package.json')) as PackageJson;
4751
delete packageContent.dependencies[dependencyName];
4852
tree.overwrite('/package.json', JSON.stringify(packageContent, null, 2));
4953
}
@@ -55,7 +59,7 @@ describe('ng-add schematic', () => {
5559
removePackageJsonDependency(appTree, '@angular/animations');
5660

5761
const tree = await runner.runSchematicAsync('ng-add', {}, appTree).toPromise();
58-
const packageJson = JSON.parse(getFileContent(tree, '/package.json'));
62+
const packageJson = JSON.parse(getFileContent(tree, '/package.json')) as PackageJson;
5963
const dependencies = packageJson.dependencies;
6064
const angularCoreVersion = dependencies['@angular/core'];
6165

@@ -87,7 +91,7 @@ describe('ng-add schematic', () => {
8791
addPackageToPackageJson(appTree, '@angular/material', '^9.0.0');
8892

8993
const tree = await runner.runSchematicAsync('ng-add', {}, appTree).toPromise();
90-
const packageJson = JSON.parse(getFileContent(tree, '/package.json'));
94+
const packageJson = JSON.parse(getFileContent(tree, '/package.json')) as PackageJson;
9195
const dependencies = packageJson.dependencies;
9296

9397
expect(dependencies['@angular/material']).toBe('^9.0.0');

src/material/schematics/ng-add/package-config.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88

99
import {Tree} from '@angular-devkit/schematics';
1010

11+
interface PackageJson {
12+
dependencies: Record<string, string>;
13+
}
14+
1115
/**
1216
* Sorts the keys of the given object.
1317
* @returns A new object instance with sorted keys
@@ -21,7 +25,7 @@ export function addPackageToPackageJson(host: Tree, pkg: string, version: string
2125

2226
if (host.exists('package.json')) {
2327
const sourceText = host.read('package.json')!.toString('utf-8');
24-
const json = JSON.parse(sourceText);
28+
const json = JSON.parse(sourceText) as PackageJson;
2529

2630
if (!json.dependencies) {
2731
json.dependencies = {};
@@ -44,7 +48,7 @@ export function getPackageVersionFromPackageJson(tree: Tree, name: string): stri
4448
return null;
4549
}
4650

47-
const packageJson = JSON.parse(tree.read('package.json')!.toString('utf8'));
51+
const packageJson = JSON.parse(tree.read('package.json')!.toString('utf8')) as PackageJson;
4852

4953
if (packageJson.dependencies && packageJson.dependencies[name]) {
5054
return packageJson.dependencies[name];

src/material/schematics/ng-update/migrations/hammer-gestures-v9/hammer-gestures-migration.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ interface IdentifierReference {
5959
isImport: boolean;
6060
}
6161

62+
interface PackageJson {
63+
dependencies: Record<string, string>;
64+
}
65+
6266
export class HammerGesturesMigration extends DevkitMigration<null> {
6367
// Only enable this rule if the migration targets v9 or v10 and is running for a non-test
6468
// target. We cannot migrate test targets since they have a limited scope
@@ -853,7 +857,7 @@ export class HammerGesturesMigration extends DevkitMigration<null> {
853857
return false;
854858
}
855859

856-
const packageJson = JSON.parse(tree.read('/package.json')!.toString('utf8'));
860+
const packageJson = JSON.parse(tree.read('/package.json')!.toString('utf8')) as PackageJson;
857861

858862
// We do not handle the case where someone manually added "hammerjs" to the dev dependencies.
859863
if (packageJson.dependencies && packageJson.dependencies[HAMMER_MODULE_SPECIFIER]) {

src/material/schematics/ng-update/test-cases/v9/misc/hammer-migration-v9.spec.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ import {createTestCaseSetup, resolveBazelPath} from '@angular/cdk/schematics/tes
55
import {readFileSync} from 'fs';
66
import {MIGRATION_PATH} from '../../../../index.spec';
77

8+
9+
interface PackageJson {
10+
dependencies: Record<string, string | undefined>;
11+
}
12+
813
describe('v9 HammerJS removal', () => {
914
const GESTURE_CONFIG_TEMPLATE_PATH = resolveBazelPath(__dirname,
1015
'../../../migrations/hammer-gestures-v9/gesture-config.template');
@@ -55,11 +60,11 @@ describe('v9 HammerJS removal', () => {
5560
it('should remove hammerjs from "package.json" file', async () => {
5661
addPackageToPackageJson(tree, 'hammerjs', '0.0.0');
5762

58-
expect(JSON.parse(tree.readContent('/package.json')).dependencies['hammerjs']).toBe('0.0.0');
63+
expect((JSON.parse(tree.readContent('/package.json')) as PackageJson).dependencies['hammerjs']).toBe('0.0.0');
5964

6065
await runMigration();
6166

62-
expect(JSON.parse(tree.readContent('/package.json')).dependencies['hammerjs'])
67+
expect((JSON.parse(tree.readContent('/package.json')) as PackageJson).dependencies['hammerjs'])
6368
.toBe(undefined);
6469

6570
// expect that there is a "node-package" install task. The task is
@@ -803,7 +808,7 @@ describe('v9 HammerJS removal', () => {
803808
it('should not remove hammerjs if test target compilation scope does not contain hammerjs usage',
804809
async () => {
805810
addPackageToPackageJson(tree, 'hammerjs', '0.0.0');
806-
expect(JSON.parse(tree.readContent('/package.json')).dependencies['hammerjs']).toBe('0.0.0');
811+
expect((JSON.parse(tree.readContent('/package.json')) as PackageJson).dependencies['hammerjs']).toBe('0.0.0');
807812

808813
// we simulate a case where a component does not have any tests for. In that case,
809814
// the test target compilation scope does not include "test.component.ts" and the
@@ -820,14 +825,14 @@ describe('v9 HammerJS removal', () => {
820825

821826
await runMigration();
822827

823-
expect(JSON.parse(tree.readContent('/package.json')).dependencies['hammerjs']).toBe('0.0.0');
828+
expect((JSON.parse(tree.readContent('/package.json')) as PackageJson).dependencies['hammerjs']).toBe('0.0.0');
824829
});
825830

826831
it('should not remove hammerjs from "package.json" file if used in one project while ' +
827832
'unused in other project', async () => {
828833
addPackageToPackageJson(tree, 'hammerjs', '0.0.0');
829834

830-
expect(JSON.parse(tree.readContent('/package.json')).dependencies['hammerjs']).toBe('0.0.0');
835+
expect((JSON.parse(tree.readContent('/package.json')) as PackageJson).dependencies['hammerjs']).toBe('0.0.0');
831836

832837
await runner.runExternalSchematicAsync('@schematics/angular', 'application',
833838
{name: 'second-project'}, tree).toPromise();
@@ -840,7 +845,7 @@ describe('v9 HammerJS removal', () => {
840845
await runMigration();
841846

842847
expect(runner.tasks.some(t => t.name === 'node-package')).toBe(false);
843-
expect(JSON.parse(tree.readContent('/package.json')).dependencies['hammerjs'])
848+
expect((JSON.parse(tree.readContent('/package.json')) as PackageJson).dependencies['hammerjs'])
844849
.toBe('0.0.0');
845850
});
846851

0 commit comments

Comments
 (0)