66 lines
1.7 KiB
TypeScript
66 lines
1.7 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright Google LLC All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.dev/license
|
|
*/
|
|
|
|
import {Tree} from '@angular-devkit/schematics';
|
|
|
|
interface PackageJson {
|
|
dependencies: Record<string, string>;
|
|
}
|
|
|
|
/**
|
|
* Sorts the keys of the given object.
|
|
* @returns A new object instance with sorted keys
|
|
*/
|
|
function sortObjectByKeys(obj: Record<string, string>) {
|
|
return Object.keys(obj)
|
|
.sort()
|
|
.reduce(
|
|
(result, key) => {
|
|
result[key] = obj[key];
|
|
return result;
|
|
},
|
|
{} as Record<string, string>,
|
|
);
|
|
}
|
|
|
|
/** Adds a package to the package.json in the given host tree. */
|
|
export function addPackageToPackageJson(host: Tree, pkg: string, version: string): Tree {
|
|
if (host.exists('package.json')) {
|
|
const sourceText = host.read('package.json')!.toString('utf-8');
|
|
const json = JSON.parse(sourceText) as PackageJson;
|
|
|
|
if (!json.dependencies) {
|
|
json.dependencies = {};
|
|
}
|
|
|
|
if (!json.dependencies[pkg]) {
|
|
json.dependencies[pkg] = version;
|
|
json.dependencies = sortObjectByKeys(json.dependencies);
|
|
}
|
|
|
|
host.overwrite('package.json', JSON.stringify(json, null, 2));
|
|
}
|
|
|
|
return host;
|
|
}
|
|
|
|
/** Gets the version of the specified package by looking at the package.json in the given tree. */
|
|
export function getPackageVersionFromPackageJson(tree: Tree, name: string): string | null {
|
|
if (!tree.exists('package.json')) {
|
|
return null;
|
|
}
|
|
|
|
const packageJson = JSON.parse(tree.read('package.json')!.toString('utf8')) as PackageJson;
|
|
|
|
if (packageJson.dependencies && packageJson.dependencies[name]) {
|
|
return packageJson.dependencies[name];
|
|
}
|
|
|
|
return null;
|
|
}
|