angular-cn/tools/inline-package-json-deps.js
Joey Perrott d1ea1f4c7f build: update license headers to reference Google LLC ()
Update the license headers throughout the repository to reference Google LLC
rather than Google Inc, for the required license headers.

PR Close 
2020-05-26 14:26:58 -04:00

77 lines
2.7 KiB
JavaScript

#!/usr/bin/env node
/**
* @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.io/license
*/
/*
* Script that updates a dependencies in a specified `package.json` file to be
* based on the dependencies of the specified base `package.json`. This allows
* developers to sync dependencies between two `package.json` files without having
* to manually copy versions all the time.
*
* e.g. `/package.json` defines the project dependencies. The `dev-infra/package.json`
* uses a subset of these dependencies and declares these as dependencies for the shared
* package. The dependencies should be the same as the one from `/package.json` as those
* versions are used for testing and development. We don't want mismatching versions.
*/
const fs = require('fs');
const args = process.argv.slice(2);
const [inputPackageJsonPath, basePackageJsonPath, outputPath] = args;
const BASE_DEPENDENCY_MARKER = '<from-root>';
if (!inputPackageJsonPath || !basePackageJsonPath || !outputPath) {
console.error('Usage: ./inline-package-json-deps.js <input-pkg-json> <base-pkg-json> <out-path>');
process.exit(1);
}
const inputPackageJson = JSON.parse(fs.readFileSync(inputPackageJsonPath, 'utf8'));
const basePackageJson = JSON.parse(fs.readFileSync(basePackageJsonPath, 'utf8'));
const result = {...inputPackageJson};
if (inputPackageJson.dependencies) {
inlineDependenciesFromBase(inputPackageJson.dependencies);
}
if (inputPackageJson.peerDependencies) {
inlineDependenciesFromBase(inputPackageJson.peerDependencies);
}
fs.writeFileSync(outputPath, JSON.stringify(result, null, 2));
/**
* Updates dependencies which have their version set to the base marker,
* to match the version from the base `package.json` file.
*/
function inlineDependenciesFromBase(deps) {
Object.keys(deps).forEach(name => {
const value = deps[name];
if (value !== BASE_DEPENDENCY_MARKER) {
return;
}
const linkedVersion = getDependency(basePackageJson, name);
if (linkedVersion === null) {
console.error(`Could not find base version for: ${name}`);
console.error(
`Either set a version for ${name} in "${basePackageJsonPath}", or use ` +
`an explicit version in "${inputPackageJson}"`);
process.exit(1);
}
deps[name] = linkedVersion;
});
}
/** Gets the version of the specified package from the given package object. */
function getDependency(packageJson, name) {
if (packageJson.dependencies && packageJson.dependencies[name]) {
return packageJson.dependencies[name];
}
if (packageJson.devDependencies && packageJson.devDependencies[name]) {
return packageJson.devDependencies[name];
}
return null;
}