51 lines
1.8 KiB
TypeScript
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").`);
|
|
}
|
|
}
|