fix(storybook): find Angular components in destructured arrays (#7494)
ISSUES CLOSED: 7117
This commit is contained in:
parent
0d3a5c375d
commit
1241068fd4
@ -56,13 +56,61 @@ export function getModuleFilePaths(tree: Tree, projectPath: string): string[] {
|
|||||||
function getDeclaredComponentsInDeclarations(
|
function getDeclaredComponentsInDeclarations(
|
||||||
declarationsArray: Node
|
declarationsArray: Node
|
||||||
): string[] {
|
): string[] {
|
||||||
return declarationsArray
|
return getDeclaredComponentNodes(declarationsArray)
|
||||||
|
.map((node) => node.getText())
|
||||||
|
.filter((name) => name.endsWith('Component'));
|
||||||
|
}
|
||||||
|
|
||||||
|
function getDeclaredComponentNodes(declarationsArray: Node): Node[] {
|
||||||
|
const cmps = declarationsArray
|
||||||
.getChildren()
|
.getChildren()
|
||||||
.find((node) => node.kind === SyntaxKind.SyntaxList)
|
.find((node) => node.kind === SyntaxKind.SyntaxList)
|
||||||
.getChildren()
|
.getChildren()
|
||||||
.filter((node) => node.kind === SyntaxKind.Identifier)
|
.map((node) => {
|
||||||
.map((node) => node.getText())
|
if (node.kind === SyntaxKind.Identifier) {
|
||||||
.filter((name) => name.endsWith('Component'));
|
return node;
|
||||||
|
}
|
||||||
|
// if the node is a destructuring, follow the variable
|
||||||
|
if (node.kind === SyntaxKind.SpreadElement) {
|
||||||
|
const declarationVariableNode = node
|
||||||
|
.getChildren()
|
||||||
|
.find((node) => node.kind === SyntaxKind.Identifier);
|
||||||
|
|
||||||
|
// try to find the variable declaration in the same component
|
||||||
|
const declarationVariable = getVariableDeclaration(
|
||||||
|
declarationVariableNode.getText(),
|
||||||
|
declarationVariableNode.getSourceFile()
|
||||||
|
);
|
||||||
|
if (
|
||||||
|
declarationVariable &&
|
||||||
|
declarationVariable.initializer.kind ===
|
||||||
|
SyntaxKind.ArrayLiteralExpression
|
||||||
|
) {
|
||||||
|
const nodes = getDeclaredComponentNodes(
|
||||||
|
declarationVariable.initializer
|
||||||
|
);
|
||||||
|
return nodes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
})
|
||||||
|
.filter((node) => !!node);
|
||||||
|
|
||||||
|
return flatten(cmps);
|
||||||
|
}
|
||||||
|
|
||||||
|
function flatten(arr) {
|
||||||
|
let flattened = [];
|
||||||
|
|
||||||
|
for (const entry of arr) {
|
||||||
|
if (Array.isArray(entry)) {
|
||||||
|
flattened.push(...flatten(entry));
|
||||||
|
} else {
|
||||||
|
flattened.push(entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return flattened;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getDeclarationsArray(
|
function getDeclarationsArray(
|
||||||
|
|||||||
@ -154,6 +154,50 @@ describe('angularStories generator: libraries', () => {
|
|||||||
).toBeTruthy();
|
).toBeTruthy();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should handle modules with where components are spread into the declarations array', async () => {
|
||||||
|
await cypressProjectGenerator(tree, {
|
||||||
|
linter: Linter.EsLint,
|
||||||
|
name: libName,
|
||||||
|
});
|
||||||
|
|
||||||
|
angularStoriesGenerator(tree, {
|
||||||
|
name: libName,
|
||||||
|
generateCypressSpecs: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(
|
||||||
|
tree.exists(
|
||||||
|
`libs/${libName}/src/lib/variable-spread-declare/variable-spread-declare-anotherview/variable-spread-declare-anotherview.component.stories.ts`
|
||||||
|
)
|
||||||
|
).toBeTruthy();
|
||||||
|
expect(
|
||||||
|
tree.exists(
|
||||||
|
`libs/${libName}/src/lib/variable-spread-declare/variable-spread-declare-button/variable-spread-declare-button.component.stories.ts`
|
||||||
|
)
|
||||||
|
).toBeTruthy();
|
||||||
|
expect(
|
||||||
|
tree.exists(
|
||||||
|
`libs/${libName}/src/lib/variable-spread-declare/variable-spread-declare-view/variable-spread-declare-view.component.stories.ts`
|
||||||
|
)
|
||||||
|
).toBeTruthy();
|
||||||
|
|
||||||
|
expect(
|
||||||
|
tree.exists(
|
||||||
|
`apps/${libName}-e2e/src/integration/variable-spread-declare-button/variable-spread-declare-button.component.spec.ts`
|
||||||
|
)
|
||||||
|
).toBeTruthy();
|
||||||
|
expect(
|
||||||
|
tree.exists(
|
||||||
|
`apps/${libName}-e2e/src/integration/variable-spread-declare-view/variable-spread-declare-view.component.spec.ts`
|
||||||
|
)
|
||||||
|
).toBeTruthy();
|
||||||
|
expect(
|
||||||
|
tree.exists(
|
||||||
|
`apps/${libName}-e2e/src/integration/variable-spread-declare-anotherview/variable-spread-declare-anotherview.component.spec.ts`
|
||||||
|
)
|
||||||
|
).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
it('should handle modules using static members for declarations rather than literals', async () => {
|
it('should handle modules using static members for declarations rather than literals', async () => {
|
||||||
await cypressProjectGenerator(tree, {
|
await cypressProjectGenerator(tree, {
|
||||||
linter: Linter.EsLint,
|
linter: Linter.EsLint,
|
||||||
|
|||||||
@ -48,6 +48,9 @@ Array [
|
|||||||
"apps/one/two/test-ui-lib-e2e/src/integration/test-other/test-other.component.spec.ts",
|
"apps/one/two/test-ui-lib-e2e/src/integration/test-other/test-other.component.spec.ts",
|
||||||
"apps/one/two/test-ui-lib-e2e/src/integration/variable-declare-button/variable-declare-button.component.spec.ts",
|
"apps/one/two/test-ui-lib-e2e/src/integration/variable-declare-button/variable-declare-button.component.spec.ts",
|
||||||
"apps/one/two/test-ui-lib-e2e/src/integration/variable-declare-view/variable-declare-view.component.spec.ts",
|
"apps/one/two/test-ui-lib-e2e/src/integration/variable-declare-view/variable-declare-view.component.spec.ts",
|
||||||
|
"apps/one/two/test-ui-lib-e2e/src/integration/variable-spread-declare-anotherview/variable-spread-declare-anotherview.component.spec.ts",
|
||||||
|
"apps/one/two/test-ui-lib-e2e/src/integration/variable-spread-declare-button/variable-spread-declare-button.component.spec.ts",
|
||||||
|
"apps/one/two/test-ui-lib-e2e/src/integration/variable-spread-declare-view/variable-spread-declare-view.component.spec.ts",
|
||||||
"apps/one/two/test-ui-lib-e2e/src/support/commands.ts",
|
"apps/one/two/test-ui-lib-e2e/src/support/commands.ts",
|
||||||
"apps/one/two/test-ui-lib-e2e/src/support/index.ts",
|
"apps/one/two/test-ui-lib-e2e/src/support/index.ts",
|
||||||
"apps/one/two/test-ui-lib-e2e/tsconfig.json",
|
"apps/one/two/test-ui-lib-e2e/tsconfig.json",
|
||||||
@ -106,6 +109,22 @@ Array [
|
|||||||
"libs/test-ui-lib/src/lib/variable-declare/variable-declare-view/variable-declare-view.component.stories.ts",
|
"libs/test-ui-lib/src/lib/variable-declare/variable-declare-view/variable-declare-view.component.stories.ts",
|
||||||
"libs/test-ui-lib/src/lib/variable-declare/variable-declare-view/variable-declare-view.component.ts",
|
"libs/test-ui-lib/src/lib/variable-declare/variable-declare-view/variable-declare-view.component.ts",
|
||||||
"libs/test-ui-lib/src/lib/variable-declare/variable-declare.module.ts",
|
"libs/test-ui-lib/src/lib/variable-declare/variable-declare.module.ts",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-anotherview/variable-spread-declare-anotherview.component.css",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-anotherview/variable-spread-declare-anotherview.component.html",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-anotherview/variable-spread-declare-anotherview.component.spec.ts",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-anotherview/variable-spread-declare-anotherview.component.stories.ts",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-anotherview/variable-spread-declare-anotherview.component.ts",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-button/variable-spread-declare-button.component.css",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-button/variable-spread-declare-button.component.html",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-button/variable-spread-declare-button.component.spec.ts",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-button/variable-spread-declare-button.component.stories.ts",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-button/variable-spread-declare-button.component.ts",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-view/variable-spread-declare-view.component.css",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-view/variable-spread-declare-view.component.html",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-view/variable-spread-declare-view.component.spec.ts",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-view/variable-spread-declare-view.component.stories.ts",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-view/variable-spread-declare-view.component.ts",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare.module.ts",
|
||||||
"libs/test-ui-lib/src/test-setup.ts",
|
"libs/test-ui-lib/src/test-setup.ts",
|
||||||
"libs/test-ui-lib/tsconfig.json",
|
"libs/test-ui-lib/tsconfig.json",
|
||||||
"libs/test-ui-lib/tsconfig.lib.json",
|
"libs/test-ui-lib/tsconfig.lib.json",
|
||||||
@ -134,6 +153,9 @@ Array [
|
|||||||
"apps/test-ui-lib-e2e/src/integration/test-other/test-other.component.spec.ts",
|
"apps/test-ui-lib-e2e/src/integration/test-other/test-other.component.spec.ts",
|
||||||
"apps/test-ui-lib-e2e/src/integration/variable-declare-button/variable-declare-button.component.spec.ts",
|
"apps/test-ui-lib-e2e/src/integration/variable-declare-button/variable-declare-button.component.spec.ts",
|
||||||
"apps/test-ui-lib-e2e/src/integration/variable-declare-view/variable-declare-view.component.spec.ts",
|
"apps/test-ui-lib-e2e/src/integration/variable-declare-view/variable-declare-view.component.spec.ts",
|
||||||
|
"apps/test-ui-lib-e2e/src/integration/variable-spread-declare-anotherview/variable-spread-declare-anotherview.component.spec.ts",
|
||||||
|
"apps/test-ui-lib-e2e/src/integration/variable-spread-declare-button/variable-spread-declare-button.component.spec.ts",
|
||||||
|
"apps/test-ui-lib-e2e/src/integration/variable-spread-declare-view/variable-spread-declare-view.component.spec.ts",
|
||||||
"apps/test-ui-lib-e2e/src/support/commands.ts",
|
"apps/test-ui-lib-e2e/src/support/commands.ts",
|
||||||
"apps/test-ui-lib-e2e/src/support/index.ts",
|
"apps/test-ui-lib-e2e/src/support/index.ts",
|
||||||
"apps/test-ui-lib-e2e/tsconfig.json",
|
"apps/test-ui-lib-e2e/tsconfig.json",
|
||||||
@ -192,6 +214,22 @@ Array [
|
|||||||
"libs/test-ui-lib/src/lib/variable-declare/variable-declare-view/variable-declare-view.component.stories.ts",
|
"libs/test-ui-lib/src/lib/variable-declare/variable-declare-view/variable-declare-view.component.stories.ts",
|
||||||
"libs/test-ui-lib/src/lib/variable-declare/variable-declare-view/variable-declare-view.component.ts",
|
"libs/test-ui-lib/src/lib/variable-declare/variable-declare-view/variable-declare-view.component.ts",
|
||||||
"libs/test-ui-lib/src/lib/variable-declare/variable-declare.module.ts",
|
"libs/test-ui-lib/src/lib/variable-declare/variable-declare.module.ts",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-anotherview/variable-spread-declare-anotherview.component.css",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-anotherview/variable-spread-declare-anotherview.component.html",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-anotherview/variable-spread-declare-anotherview.component.spec.ts",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-anotherview/variable-spread-declare-anotherview.component.stories.ts",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-anotherview/variable-spread-declare-anotherview.component.ts",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-button/variable-spread-declare-button.component.css",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-button/variable-spread-declare-button.component.html",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-button/variable-spread-declare-button.component.spec.ts",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-button/variable-spread-declare-button.component.stories.ts",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-button/variable-spread-declare-button.component.ts",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-view/variable-spread-declare-view.component.css",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-view/variable-spread-declare-view.component.html",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-view/variable-spread-declare-view.component.spec.ts",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-view/variable-spread-declare-view.component.stories.ts",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare-view/variable-spread-declare-view.component.ts",
|
||||||
|
"libs/test-ui-lib/src/lib/variable-spread-declare/variable-spread-declare.module.ts",
|
||||||
"libs/test-ui-lib/src/test-setup.ts",
|
"libs/test-ui-lib/src/test-setup.ts",
|
||||||
"libs/test-ui-lib/tsconfig.json",
|
"libs/test-ui-lib/tsconfig.json",
|
||||||
"libs/test-ui-lib/tsconfig.lib.json",
|
"libs/test-ui-lib/tsconfig.lib.json",
|
||||||
|
|||||||
@ -137,6 +137,53 @@ const COMPONENTS = [
|
|||||||
export class VariableDeclareModule {}`
|
export class VariableDeclareModule {}`
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// create a module with components that get Angular exported and declared by variable
|
||||||
|
await moduleGenerator(tree, {
|
||||||
|
name: 'variable-spread-declare',
|
||||||
|
project: libName,
|
||||||
|
});
|
||||||
|
|
||||||
|
await componentGenerator(tree, {
|
||||||
|
name: 'variable-spread-declare-button',
|
||||||
|
project: libName,
|
||||||
|
path: `libs/${libName}/src/lib/variable-spread-declare`,
|
||||||
|
module: 'variable-spread-declare',
|
||||||
|
});
|
||||||
|
|
||||||
|
await componentGenerator(tree, {
|
||||||
|
name: 'variable-spread-declare-view',
|
||||||
|
project: libName,
|
||||||
|
path: `libs/${libName}/src/lib/variable-spread-declare`,
|
||||||
|
module: 'variable-spread-declare',
|
||||||
|
});
|
||||||
|
|
||||||
|
await componentGenerator(tree, {
|
||||||
|
name: 'variable-spread-declare-anotherview',
|
||||||
|
project: libName,
|
||||||
|
path: `libs/${libName}/src/lib/variable-spread-declare`,
|
||||||
|
module: 'variable-spread-declare',
|
||||||
|
});
|
||||||
|
|
||||||
|
tree.write(
|
||||||
|
`libs/${libName}/src/lib/variable-spread-declare/variable-spread-declare.module.ts`,
|
||||||
|
`import { NgModule } from '@angular/core';
|
||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
import { VariableSpreadDeclareButtonComponent } from './variable-spread-declare-button/variable-spread-declare-button.component';
|
||||||
|
import { VariableSpreadDeclareViewComponent } from './variable-spread-declare-view/variable-spread-declare-view.component';
|
||||||
|
import { VariableSpreadDeclareAnotherviewComponent } from './variable-spread-declare-anotherview/variable-spread-declare-anotherview.component';
|
||||||
|
|
||||||
|
const COMPONENTS = [
|
||||||
|
VariableSpreadDeclareButtonComponent,
|
||||||
|
VariableSpreadDeclareViewComponent
|
||||||
|
]
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
imports: [CommonModule],
|
||||||
|
declarations: [...COMPONENTS, VariableSpreadDeclareAnotherviewComponent],
|
||||||
|
})
|
||||||
|
export class VariableSpreadDeclareModule {}`
|
||||||
|
);
|
||||||
|
|
||||||
// create a module where declared components are pulled from a static member of the module
|
// create a module where declared components are pulled from a static member of the module
|
||||||
await moduleGenerator(tree, {
|
await moduleGenerator(tree, {
|
||||||
name: 'static-member-declarations',
|
name: 'static-member-declarations',
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user