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.
 | |
| `);
 | |
| }
 |