85 lines
2.8 KiB
TypeScript
85 lines
2.8 KiB
TypeScript
import { formatFiles, joinPathFragments, logger, Tree } from '@nrwl/devkit';
|
|
import componentCypressSpecGenerator from '../component-cypress-spec/component-cypress-spec';
|
|
import componentStoryGenerator from '../component-story/component-story';
|
|
import type { ComponentInfo } from '../utils/storybook-ast/component-info';
|
|
import {
|
|
getComponentsInfo,
|
|
getStandaloneComponentsInfo,
|
|
} from '../utils/storybook-ast/component-info';
|
|
import { getProjectEntryPoints } from '../utils/storybook-ast/entry-point';
|
|
import { getE2EProject } from './lib/get-e2e-project';
|
|
import { getModuleFilePaths } from '../utils/storybook-ast/module-info';
|
|
import type { StoriesGeneratorOptions } from './schema';
|
|
import minimatch = require('minimatch');
|
|
|
|
export function angularStoriesGenerator(
|
|
tree: Tree,
|
|
options: StoriesGeneratorOptions
|
|
): void {
|
|
const e2eProjectName = options.cypressProject ?? `${options.name}-e2e`;
|
|
const e2eProject = getE2EProject(tree, e2eProjectName);
|
|
const entryPoints = getProjectEntryPoints(tree, options.name);
|
|
const componentsInfo: ComponentInfo[] = [];
|
|
for (const entryPoint of entryPoints) {
|
|
const moduleFilePaths = getModuleFilePaths(tree, entryPoint);
|
|
componentsInfo.push(
|
|
...getComponentsInfo(tree, entryPoint, moduleFilePaths, options.name),
|
|
...getStandaloneComponentsInfo(tree, entryPoint)
|
|
);
|
|
}
|
|
|
|
if (options.generateCypressSpecs && !e2eProject) {
|
|
logger.info(
|
|
`There was no e2e project "${e2eProjectName}" found, so cypress specs will not be generated. Pass "--cypressProject" to specify a different e2e project name.`
|
|
);
|
|
}
|
|
|
|
componentsInfo
|
|
.filter(
|
|
(f) =>
|
|
!options.ignorePaths?.some((pattern) => {
|
|
const shouldIgnorePath = minimatch(
|
|
joinPathFragments(
|
|
f.moduleFolderPath,
|
|
f.path,
|
|
`${f.componentFileName}.ts`
|
|
),
|
|
pattern
|
|
);
|
|
return shouldIgnorePath;
|
|
})
|
|
)
|
|
?.forEach((info) => {
|
|
if (info === undefined) {
|
|
return;
|
|
}
|
|
|
|
componentStoryGenerator(tree, {
|
|
projectPath: info.moduleFolderPath,
|
|
componentName: info.name,
|
|
componentPath: info.path,
|
|
componentFileName: info.componentFileName,
|
|
skipFormat: false,
|
|
});
|
|
|
|
if (options.generateCypressSpecs && e2eProject) {
|
|
componentCypressSpecGenerator(tree, {
|
|
projectName: options.name,
|
|
projectPath: info.moduleFolderPath,
|
|
cypressProject: options.cypressProject,
|
|
componentName: info.name,
|
|
componentPath: info.path,
|
|
componentFileName: info.componentFileName,
|
|
specDirectory: joinPathFragments(info.entryPointName, info.path),
|
|
skipFormat: false,
|
|
});
|
|
}
|
|
});
|
|
|
|
if (!options.skipFormat) {
|
|
formatFiles(tree);
|
|
}
|
|
}
|
|
|
|
export default angularStoriesGenerator;
|