2024-01-16 15:29:44 +01:00

104 lines
2.5 KiB
TypeScript

import type { Tree } from '@nx/devkit';
import { formatFiles, generateFiles, joinPathFragments } from '@nx/devkit';
import { addToNgModule } from '../utils';
import { getInstalledAngularVersionInfo } from '../utils/version-utils';
import {
exportComponentInEntryPoint,
findModuleFromOptions,
normalizeOptions,
setGeneratorDefaults,
} from './lib';
import type { Schema } from './schema';
export async function componentGenerator(tree: Tree, rawOptions: Schema) {
await componentGeneratorInternal(tree, {
nameAndDirectoryFormat: 'derived',
...rawOptions,
});
}
export async function componentGeneratorInternal(
tree: Tree,
rawOptions: Schema
) {
const options = await normalizeOptions(tree, rawOptions);
const { major: angularMajorVersion } = getInstalledAngularVersionInfo(tree);
generateFiles(
tree,
joinPathFragments(__dirname, 'files'),
options.directory,
{
name: options.name,
fileName: options.fileName,
symbolName: options.symbolName,
style: options.style,
inlineStyle: options.inlineStyle,
inlineTemplate: options.inlineTemplate,
standalone: options.standalone,
skipSelector: options.skipSelector,
changeDetection: options.changeDetection,
viewEncapsulation: options.viewEncapsulation,
displayBlock: options.displayBlock,
selector: options.selector,
angularMajorVersion,
tpl: '',
}
);
if (options.skipTests) {
const pathToSpecFile = joinPathFragments(
options.directory,
`${options.fileName}.spec.ts`
);
tree.delete(pathToSpecFile);
}
if (options.inlineTemplate) {
const pathToTemplateFile = joinPathFragments(
options.directory,
`${options.fileName}.html`
);
tree.delete(pathToTemplateFile);
}
if (options.style === 'none' || options.inlineStyle) {
const pathToStyleFile = joinPathFragments(
options.directory,
`${options.fileName}.${options.style}`
);
tree.delete(pathToStyleFile);
}
if (!options.skipImport && !options.standalone) {
const modulePath = findModuleFromOptions(
tree,
options,
options.projectRoot
);
addToNgModule(
tree,
options.directory,
modulePath,
options.name,
options.symbolName,
options.fileName,
'declarations',
true,
options.export
);
}
exportComponentInEntryPoint(tree, options);
setGeneratorDefaults(tree, options);
if (!options.skipFormat) {
await formatFiles(tree);
}
}
export default componentGenerator;