nx/packages/angular/src/generators/component/lib/normalize-options.ts

59 lines
1.8 KiB
TypeScript

import type { Tree } from '@nx/devkit';
import { names, readProjectConfiguration } from '@nx/devkit';
import { determineArtifactNameAndDirectoryOptions } from '@nx/devkit/src/generators/artifact-name-and-directory-utils';
import type { AngularProjectConfiguration } from '../../../utils/types';
import { buildSelector, validateHtmlSelector } from '../../utils/selector';
import type { NormalizedSchema, Schema } from '../schema';
export async function normalizeOptions(
tree: Tree,
options: Schema
): Promise<NormalizedSchema> {
options.type ??= 'component';
const {
artifactName: name,
directory,
fileName,
filePath,
project: projectName,
} = await determineArtifactNameAndDirectoryOptions(tree, {
artifactType: 'component',
callingGenerator: '@nx/angular:component',
name: options.name,
directory: options.directory ?? options.path,
flat: options.flat,
nameAndDirectoryFormat: options.nameAndDirectoryFormat,
project: options.project,
suffix: options.type ?? 'component',
});
const { className } = names(name);
const { className: suffixClassName } = names(options.type);
const symbolName = `${className}${suffixClassName}`;
const { prefix, root, sourceRoot } = readProjectConfiguration(
tree,
projectName
) as AngularProjectConfiguration;
const selector =
options.selector ?? buildSelector(name, options.prefix, prefix, 'fileName');
validateHtmlSelector(selector);
return {
...options,
name,
projectName,
changeDetection: options.changeDetection ?? 'Default',
style: options.style ?? 'css',
standalone: options.standalone ?? true,
directory,
fileName,
filePath,
symbolName,
projectSourceRoot: sourceRoot,
projectRoot: root,
selector,
};
}