90 lines
3.1 KiB
JavaScript
90 lines
3.1 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
|
||
|
*/
|
||
|
|
||
|
// Rollup configuration
|
||
|
// GENERATED BY Bazel
|
||
|
|
||
|
const buildOptimizer =
|
||
|
require('@angular-devkit/build-optimizer/src/build-optimizer/rollup-plugin.js');
|
||
|
const nodeResolve = require('rollup-plugin-node-resolve');
|
||
|
const sourcemaps = require('rollup-plugin-sourcemaps');
|
||
|
const commonjs = require('rollup-plugin-commonjs');
|
||
|
const path = require('path');
|
||
|
const fs = require('fs');
|
||
|
|
||
|
function log_verbose(...m) {
|
||
|
// This is a template file so we use __filename to output the actual filename
|
||
|
if (!!process.env['VERBOSE_LOGS']) console.error(`[${path.basename(__filename)}]`, ...m);
|
||
|
}
|
||
|
|
||
|
// Substitutions from the `ng_rollup_bundle` macro. We want to conditionally toggle
|
||
|
// build optimizer, support optional banner files, and generally respect the current
|
||
|
// compilation mode (i.e. Ivy or View Engine) as that affects module resolution.
|
||
|
const useBuildOptimizer = TMPL_build_optimizer;
|
||
|
const bannerFile = TMPL_banner_file;
|
||
|
const ivyEnabled = 'TMPL_angular_ivy_enabled' === 'True';
|
||
|
// `bazel_stamp_file` is a substitution that is applied by `@bazel/rollup`.
|
||
|
const stampDataFile = bazel_stamp_file;
|
||
|
|
||
|
log_verbose(`running with
|
||
|
cwd: ${process.cwd()}
|
||
|
useBuildOptimizer: ${useBuildOptimizer}
|
||
|
bannerFile: ${bannerFile}
|
||
|
stampDataFile: ${stampDataFile}
|
||
|
ivyEnabled: ${ivyEnabled}
|
||
|
`);
|
||
|
|
||
|
const plugins = [
|
||
|
nodeResolve({
|
||
|
// If Ivy is enabled, we need to make sure that the module resolution prioritizes ngcc
|
||
|
// processed entry-point fields. Ngcc adds special fields to `package.json` files of
|
||
|
// modules that have been processed. Prioritizing these fields matches the Angular CLIs
|
||
|
// behavior for supporting Ivy. We need to support ngcc because `ng_rollup_bundle` rule is
|
||
|
// shared with other repositories that consume Angular from NPM (w/ ngcc).
|
||
|
// https://github.com/angular/angular-cli/blob/1a1ceb609b9a87c4021cce3a6f0fc6d167cd09d2/packages/ngtools/webpack/src/angular_compiler_plugin.ts#L918-L920
|
||
|
mainFields: ivyEnabled ? ['module_ivy_ngcc', 'main_ivy_ngcc', 'module', 'main'] :
|
||
|
['module', 'main'],
|
||
|
}),
|
||
|
commonjs({ignoreGlobal: true}),
|
||
|
sourcemaps(),
|
||
|
];
|
||
|
|
||
|
if (useBuildOptimizer) {
|
||
|
plugins.unshift(buildOptimizer.default({
|
||
|
sideEffectFreeModules: [],
|
||
|
}));
|
||
|
}
|
||
|
|
||
|
module.exports = {
|
||
|
plugins,
|
||
|
external: [TMPL_external],
|
||
|
output: {
|
||
|
globals: {TMPL_globals},
|
||
|
banner: extractBannerIfConfigured(),
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/** Extracts the top-level bundle banner if specified. */
|
||
|
function extractBannerIfConfigured() {
|
||
|
if (!bannerFile) {
|
||
|
return undefined;
|
||
|
}
|
||
|
let banner = fs.readFileSync(bannerFile, 'utf8');
|
||
|
if (stampDataFile) {
|
||
|
const versionTag = fs.readFileSync(stampDataFile, 'utf8')
|
||
|
.split('\n')
|
||
|
.find(s => s.startsWith('BUILD_SCM_VERSION'));
|
||
|
// Don't assume BUILD_SCM_VERSION exists
|
||
|
if (versionTag) {
|
||
|
const version = versionTag.split(' ')[1].trim();
|
||
|
banner = banner.replace(/0.0.0-PLACEHOLDER/, version);
|
||
|
}
|
||
|
}
|
||
|
return banner;
|
||
|
}
|