@angular/build
Version:
Official build system for Angular
78 lines (77 loc) • 3.59 kB
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.dev/license
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createGlobalStylesBundleOptions = createGlobalStylesBundleOptions;
const node_assert_1 = __importDefault(require("node:assert"));
const bundle_options_1 = require("./stylesheets/bundle-options");
const virtual_module_plugin_1 = require("./virtual-module-plugin");
function createGlobalStylesBundleOptions(options, target, initial) {
const { workspaceRoot, optimizationOptions, sourcemapOptions, outputNames, globalStyles, preserveSymlinks, externalDependencies, stylePreprocessorOptions, tailwindConfiguration, postcssConfiguration, cacheOptions, } = options;
const namespace = 'angular:styles/global';
const entryPoints = {};
let found = false;
for (const style of globalStyles) {
if (style.initial === initial) {
found = true;
entryPoints[style.name] = `${namespace};${style.name}`;
}
}
// Skip if there are no entry points for the style loading type
if (found === false) {
return;
}
return (loadCache) => {
const buildOptions = (0, bundle_options_1.createStylesheetBundleOptions)({
workspaceRoot,
optimization: !!optimizationOptions.styles.minify,
inlineFonts: !!optimizationOptions.fonts.inline,
sourcemap: !!sourcemapOptions.styles && (sourcemapOptions.hidden ? 'external' : true),
sourcesContent: sourcemapOptions.sourcesContent,
preserveSymlinks,
target,
externalDependencies,
outputNames: initial
? outputNames
: {
...outputNames,
bundles: '[name]',
},
includePaths: stylePreprocessorOptions?.includePaths,
// string[] | undefined' is not assignable to type '(Version | DeprecationOrId)[] | undefined'.
// eslint-disable-next-line @typescript-eslint/no-explicit-any
sass: stylePreprocessorOptions?.sass,
tailwindConfiguration,
postcssConfiguration,
cacheOptions,
}, loadCache);
// Keep special CSS comments `/*! comment */` in place when `removeSpecialComments` is disabled.
// These comments are special for a number of CSS tools such as Beasties and PurgeCSS.
buildOptions.legalComments = optimizationOptions.styles?.removeSpecialComments
? 'none'
: 'inline';
buildOptions.entryPoints = entryPoints;
buildOptions.plugins.unshift((0, virtual_module_plugin_1.createVirtualModulePlugin)({
namespace,
transformPath: (path) => path.split(';', 2)[1],
loadContent: (args) => {
const files = globalStyles.find(({ name }) => name === args.path)?.files;
(0, node_assert_1.default)(files, `global style name should always be found [${args.path}]`);
return {
contents: files.map((file) => `@import '${file.replace(/\\/g, '/')}';`).join('\n'),
loader: 'css',
resolveDir: workspaceRoot,
};
},
}));
return buildOptions;
};
}