51 lines
1.8 KiB
TypeScript

import { stripIndents } from '@nx/devkit';
import { extname } from 'path';
import type { VersionInfo } from '../../executors/utilities/angular-version-utils';
import { getInstalledAngularVersionInfo } from '../../executors/utilities/angular-version-utils';
import type { BrowserBuilderSchema } from './schema';
export function validateOptions(options: BrowserBuilderSchema): void {
const angularVersionInfo = getInstalledAngularVersionInfo();
validatePolyfills(options, angularVersionInfo);
validateStyles(options, angularVersionInfo);
}
function validatePolyfills(
options: BrowserBuilderSchema,
{ major, version }: VersionInfo
): void {
if (major < 15 && Array.isArray(options.polyfills)) {
throw new Error(stripIndents`The array syntax for the "polyfills" option is supported from Angular >= 15.0.0. You are currently using "${version}".
You can resolve this error by removing the "polyfills" option, setting it to a string value or migrating to Angular 15.0.0.`);
}
}
function validateStyles(
options: BrowserBuilderSchema,
{ major, version }: VersionInfo
): void {
if (!options.styles || !options.styles.length) {
return;
}
if (major < 15) {
return;
}
const stylusFiles = [];
options.styles.forEach((style) => {
const styleFile = typeof style === 'string' ? style : style.input;
if (extname(styleFile) === '.styl') {
stylusFiles.push(styleFile);
}
});
if (stylusFiles.length) {
throw new Error(stripIndents`Stylus is not supported since Angular v15. You're currently using "${version}".
You have the "styles" option with the following file(s) using the ".styl" extension: ${stylusFiles
.map((x) => `"${x}"`)
.join(', ')}.
Make sure to convert them to a supported extension (".css", ".scss", ".sass", ".less").`);
}
}