64 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			64 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * 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
							 | 
						||
| 
								 | 
							
								    if (!packageName.startsWith('@angular/')) {
							 | 
						||
| 
								 | 
							
								      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.log(green(`Updated ${packageJsonPath} to packages in ${packagesDistRoot}:`));
							 | 
						||
| 
								 | 
							
								  console.log(`  ${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.log(yellow(`Did not update packages that were not present in ${packagesDistRoot}:`));
							 | 
						||
| 
								 | 
							
								  console.log(`  ${skipped.join('\n  ')}\n`);
							 | 
						||
| 
								 | 
							
								}
							 |