diff --git a/compiler/components/sideBar_container.json b/compiler/components/sideBar_container.json index cad5291e9665e4466da65fdd53f4f1a5350b6ba0..a870c0d6293d9919376b53051c71912d48317924 100644 --- a/compiler/components/sideBar_container.json +++ b/compiler/components/sideBar_container.json @@ -1,6 +1,6 @@ { "name": "SideBarContainer", "attrs": [ - "showSideBar", "controlButton", "showControlButton", "onChange", "sideBarWidth", "maxSideBarWidth", "maxSideBarWidth" + "showSideBar", "controlButton", "showControlButton", "onChange", "sideBarWidth", "minSideBarWidth", "maxSideBarWidth" ] } \ No newline at end of file diff --git a/compiler/src/process_component_build.ts b/compiler/src/process_component_build.ts index efb72094ef3c93da475cfec82604e17edafe9734..cc6349ecdb279e5414ccfc59f2caa6174588f37f 100644 --- a/compiler/src/process_component_build.ts +++ b/compiler/src/process_component_build.ts @@ -129,10 +129,8 @@ export function processComponentBlock(node: ts.Block, isLazy: boolean, log: LogI function validateRootNode(node: ts.MethodDeclaration, log: LogInfo[]): boolean { let isValid: boolean = false; if (node.body.statements.length === 1) { - const statement: ts.Node = node.body.statements[0]; - if (ts.isIfStatement(statement) || ts.isExpressionStatement(statement) && statement.expression && - (ts.isEtsComponentExpression(statement.expression) || ts.isCallExpression(statement.expression)) && - validateEtsComponentNode(statement.expression)) { + const statement: ts.Statement = node.body.statements[0]; + if (ts.isIfStatement(statement) || validateFirstNode(statement)) { isValid = true; } } else { @@ -148,6 +146,27 @@ function validateRootNode(node: ts.MethodDeclaration, log: LogInfo[]): boolean { return isValid; } +function validateFirstNode(node: ts.Statement): boolean { + const isEntryComponent: boolean = + componentCollection.entryComponent === componentCollection.currentClassName; + if (isEntryComponent && !validateContainerComponent(node)) { + return false; + } + return true; +} + +function validateContainerComponent(node: ts.Statement): boolean { + if (ts.isExpressionStatement(node) && node.expression && + (ts.isEtsComponentExpression(node.expression) || ts.isCallExpression(node.expression))) { + const nameResult: NameResult = { name: null }; + validateEtsComponentNode(node.expression, nameResult); + if (nameResult.name && BUILDIN_CONTAINER_COMPONENT.has(nameResult.name)) { + return true; + } + } + return false; +} + interface supplementType { isAcceleratePreview: boolean, line: number, @@ -162,13 +181,21 @@ let newsupplement: supplementType = { fileName: '' }; -function validateEtsComponentNode(node: ts.CallExpression | ts.EtsComponentExpression) { +type NameResult = { + name: string +} + +function validateEtsComponentNode(node: ts.CallExpression | ts.EtsComponentExpression, result?: NameResult) { let childNode: ts.Node = node; + result.name = null; while (ts.isCallExpression(childNode) && childNode.expression && ts.isPropertyAccessExpression(childNode.expression) && childNode.expression.expression) { childNode = childNode.expression.expression; } if (ts.isEtsComponentExpression(childNode)) { + if (ts.isIdentifier(childNode.expression)) { + result.name = childNode.expression.getText(); + } return true; } else { return false;