75 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			75 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | /** | ||
|  |  * @license | ||
|  |  * Copyright Google Inc. 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
 | ||
|  |  */ | ||
|  | /** | ||
|  |  * @fileoverview This script runs as a postinstall in the published npm packages | ||
|  |  * and checks that the version of the build_bazel_rules_typescript external | ||
|  |  * repository matches that of the published npm package. | ||
|  |  * | ||
|  |  * Note, this check is only performed with bazel managed deps when the yarn or | ||
|  |  * npm install is from a yarn_install or npm_install repository rule. For self | ||
|  |  * managed bazel deps this check is not performed and it is the responsibility | ||
|  |  * of the user to ensure that the versions match. | ||
|  |  */ | ||
|  | 'use strict'; | ||
|  | 
 | ||
|  | const path = require('path'); | ||
|  | const fs = require('fs'); | ||
|  | 
 | ||
|  | // Version in package.bzl should match the npm package version
 | ||
|  | // but this should be tolerant of development stamped versions such as
 | ||
|  | // "0.17.0-7-g76dc057"
 | ||
|  | const npmPackageVersion = process.env.npm_package_version.split('-')[0]; | ||
|  | 
 | ||
|  | // If this is a bazel managed deps yarn_install or npm_install then the
 | ||
|  | // cwd is $(bazel info
 | ||
|  | // output_base)/external/<wksp>/node_modules/@angular/bazel and there should
 | ||
|  | // be $(bazel info output_base)/external/<wksp>/internal/generate_build_file.js
 | ||
|  | // folder
 | ||
|  | function isBazelManagedDeps() { | ||
|  |   try { | ||
|  |     fs.statSync('../../../generate_build_file.js'); | ||
|  |     return true; | ||
|  |   } catch (e) { | ||
|  |     return false; | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | if (isBazelManagedDeps()) { | ||
|  |   let contents; | ||
|  |   try { | ||
|  |     // If this is a yarn_install or npm_install then the cwd is $(bazel info
 | ||
|  |     // output_base)/external/<wksp>/node_modules/@angular/bazel so we can look for
 | ||
|  |     // the package.json file under $(bazel info
 | ||
|  |     // output_base)/external/angular/package.json
 | ||
|  |     const packagePath = path.resolve(process.cwd(), '../../../../angular/package.json'); | ||
|  |     contents = require(packagePath); | ||
|  |   } catch (e) { | ||
|  |     throw new Error('The angular repository is not installed in your Bazel WORKSPACE file'); | ||
|  |   } | ||
|  |   if (contents.name !== 'angular-srcs') { | ||
|  |     throw new Error('Invalid package.json in angular repository'); | ||
|  |   } | ||
|  |   // Be tolerant of versions such as "0.17.0-7-g76dc057"
 | ||
|  |   const angularPackageVersion = contents.version.split('-')[0]; | ||
|  |   if (npmPackageVersion !== angularPackageVersion) { | ||
|  |     // TODO: we might need to support a range here.
 | ||
|  |     // For example, if you end up with @angular/bazel@6.1.8 and
 | ||
|  |     // @angular/bazel@6.1.9 both installed one of the postinstalls is
 | ||
|  |     // guaranteed to fail since there's only one version of
 | ||
|  |     // angular
 | ||
|  |     throw new Error(`Expected angular repository to be version ${ | ||
|  |         npmPackageVersion} but found ${angularPackageVersion}`);
 | ||
|  |   } | ||
|  | } else { | ||
|  |   // No version check
 | ||
|  |   console.warn(`WARNING: With self managed deps you must ensure the @angular/bazel
 | ||
|  | npm package version matches the angular repository version. | ||
|  | Use yarn_install or npm_install for this version to be checked automatically. | ||
|  | `);
 | ||
|  | } |