73 lines
2.7 KiB
JavaScript
73 lines
2.7 KiB
JavaScript
/**
|
|
* @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
|
|
*/
|
|
|
|
/*
|
|
* This script updates a package.json file by replacing all dependencies and devDependencies
|
|
* such that all packages from the @angular scope point to the packages-dist directory.
|
|
*
|
|
* Please be aware that updating of versions might introduce compatibility issues. For instance,
|
|
* if a peer dependency of Angular, e.g. "typescript" changes, the package.json that is updated
|
|
* by this script will not have updated the "typescript" dependency to satisfy the peer dependency
|
|
* requirement. As a result, incompatibility errors might occur.
|
|
*/
|
|
'use strict';
|
|
|
|
const {yellow, green} = require('chalk');
|
|
const {existsSync, writeFileSync} = require('fs');
|
|
const {resolve} = require('path');
|
|
|
|
const [, , packageJsonPath, packagesDistRoot] = process.argv;
|
|
|
|
const packageJson = require(packageJsonPath);
|
|
|
|
const updated = [];
|
|
const skipped = [];
|
|
function updateDeps(dependencies) {
|
|
for (const packageName of Object.keys(dependencies)) {
|
|
// We're only interested to update packages in the `@angular` scope. The shared dev-infra
|
|
// package is not updated as it's not a package that is part of the Angular framework.
|
|
if (!packageName.startsWith('@angular/') || packageName === '@angular/dev-infra-private') {
|
|
continue;
|
|
}
|
|
|
|
// Within the packages-dist directory there's no scope name
|
|
const packageNameWithoutScope = packageName.replace('@angular/', '');
|
|
const packagePath = resolve(packagesDistRoot, packageNameWithoutScope);
|
|
|
|
// Check whether the package exists in packages-dist. Not all packages
|
|
// in the @angular scope are published from the main Angular repo.
|
|
if (existsSync(packagePath)) {
|
|
// Update the dependency to point to the packages-dist location.
|
|
dependencies[packageName] = `file:${packagePath}`;
|
|
updated.push(packageName);
|
|
} else {
|
|
skipped.push(packageName);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// Update dependencies from @angular scope to those in the packages-dist folder
|
|
updateDeps(packageJson.dependencies);
|
|
updateDeps(packageJson.devDependencies);
|
|
|
|
// Write the updated package.json contents
|
|
writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
|
|
|
|
// Log all packages that were updated
|
|
if (updated.length > 0) {
|
|
console.info(green(`Updated ${packageJsonPath} to packages in ${packagesDistRoot}:`));
|
|
console.info(` ${updated.join('\n ')}\n`);
|
|
}
|
|
|
|
// Log the packages that were skipped, as they were not present in the packages-dist directory
|
|
if (skipped.length > 0) {
|
|
console.info(yellow(`Did not update packages that were not present in ${packagesDistRoot}:`));
|
|
console.info(` ${skipped.join('\n ')}\n`);
|
|
}
|